代码随想录算法训练营Day2|977 有效数组的平方,59螺旋矩

2023-10-11  本文已影响0人  是小张啊啊

977.有效数组的平方

题目描述:

给你一个按非递减顺序排序的整数数组 nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]

解题心路历程

注意
1 需要遍历整个数组;
2 新数组长度与原数组长度保持一致,并从末尾开始填充 ;
3 左、右指针对应的值被赋值给新数组后,才发生移动,并不是同时发生位置移动;

var sortedSquares = function(nums) {
    let left = 0;
    let right = nums.length - 1;
    let res = [];
    let index = right
    for(let i = 0; i<nums.length; i++){
        let lval = Math.pow(nums[left], 2);
        let rval = Math.pow(nums[right], 2);
        if (lval < rval) {
            res[index] = rval
            right--
        } else {
            res[index] = lval
            left++
        }
        index--
    }
    return res
};

59.螺旋矩阵 ||

题目描述:

给你一个正整数 n ,生成一个包含 1 到 n2 所有元素,且元素按顺时针顺序螺旋排列的 n x n 正方形矩阵 matrix 。
示例 1:
输入:n = 3
输出:[[1,2,3],[8,9,4],[7,6,5]]
示例 2:
输入:n=1
输出:[[1]]

解题心路历程

注意
1 遍历顺序完全同模拟过程一致:左 - > 右,上 -> 下,右 -> 左, 下 -> 上;
2 填充循环的区间保持统一,要不全部左闭右开,要不全部左开右闭;
3 循环1圈结束后,起始位置坐标要移动到下1圈中,即分别startX++,startY++,相应的可填充的个数减少1;
4 js中圈数loop 和中心坐标mid要用Math.floor(n / 2)取值,得到整数;

var generateMatrix = function(n) {
    let startX = 0;
    let startY = 0; // 起始位置
    let loop = Math.floor(n / 2); // 循环圈数
    let mid = Math.floor(n / 2); // 中心坐标
    let res = new Array(n).fill(0).map(() => new Array(n).fill(0));
    let offset = 1; // 控制每行填充元素的个数
    let count = 1; // 填充元素值
    while(loop--) {
        let row = startX;
        let col = startY;
        for (; col < n-offset; col++) {
            res[row][col] = count++
        }
        for (; row < n-offset; row++) {
            res[row][col] = count++
        }
        for (; col > startY; col--) {
            res[row][col] = count++
        }
        for (; row > startX; row--) {
            res[row][col] = count++
        }
        startX++
        startY++

        offset += 1
    }
    if (n % 2 === 1) {
        res[mid][mid] = count
    }
    return res;
};
上一篇 下一篇

猜你喜欢

热点阅读