力扣刷题日记(6)

**

八、螺旋矩阵

**
给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例 1:

输入:
[
[ 1, 2, 3 ],
[ 4, 5, 6 ],
[ 7, 8, 9 ]
]
输出: [1,2,3,6,9,8,7,4,5]
示例 2:

输入:
[
[1, 2, 3, 4],
[5, 6, 7, 8],
[9,10,11,12]
]
输出: [1,2,3,4,8,12,11,10,9,5,6,7]

原题: 传送门

题解:

/**
 * @param {number[][]} matrix
 * @return {number[]}
 */
var spiralOrder = function(matrix) {
    let result = [];
    if(matrix.length == 0){
        return result;
    }
    let rowH = 0;
    let rowT = matrix.length - 1 ;
    let colH = 0;
    let colT = matrix[0].length - 1;
    while(rowH<=rowT&&colH<=colT){
        for(let c = colH ; c<=colT;c++){
            result.push(matrix[rowH][c]);
        }
        for(let r= colH +1 ; r<=rowT ; r++){
            result.push(matrix[r][colT]);
        }
        if(rowH<rowT&&colH<colT){
            for(let c = colT -1 ; c > colH ; c-- ){
                result.push(matrix[rowT][c]);
            }
            for(let r = rowT; r> rowH ; r--){
                result.push(matrix[r][colH]);
            }
        }
        rowH++;
        rowT--;
        colH++;
        colT--;
    }
    
    return result;
};

嗯哼,就是模拟整个螺旋的过程

22 / 22 个通过测试用例
状态:通过
执行用时:108 ms

就是挺慢的…嗯哼,再来一题。

九、数组的相对排序

给你两个数组,arr1 和 arr2,

arr2 中的元素各不相同
arr2 中的每个元素都出现在 arr1 中
对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。

示例:

输入:arr1 = [2,3,1,3,2,4,6,7,9,2,19], arr2 = [2,1,4,3,9,6]
输出:[2,2,2,1,4,3,3,9,6,7,19]

提示:

arr1.length, arr2.length <= 1000
0 <= arr1[i], arr2[i] <= 1000
arr2 中的元素 arr2[i] 各不相同
arr2 中的每个元素 arr2[i] 都出现在 arr1 中

原题:传送门

题解:

	/**
 * @param {number[]} arr1
 * @param {number[]} arr2
 * @return {number[]}
 */
var relativeSortArray = function(arr1, arr2) {
    let head = []
    let tail = []
    for(let i = 0 ; i< arr2.length ; i++){
            for(let j = 0 ; j< arr1.length;j++){
                if(arr1[j] == arr2[i]){
                    head.push(arr1[j]);
                }
            }
        }
    for(let i = 0 ; i< arr1.length;i++){
        let dirt= false;
        for(let j = 0 ;j<arr2.length;j++){
            if(arr1[i]==arr2[j]){
                dirt = true;
            }
        }
        if(!dirt){
           tail.push(arr1[i])
        }
    }
    tail.sort(function(num1,num2){
            return num1 - num2;
        })
    return head.concat(tail);
};

16 / 16 个通过测试用例
状态:通过
执行用时:84 ms

嗯,效率一般,就是省内存。回见。


版权声明:本文为qq_43268015原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。