977. 有序数组的平方

对撞指针

解题思路

  1. 使用两个指针 leftright 分别指向数组的 第一位最后一位 ,每次比较两个指针对应的数,选择较大的那个逆序放入答案并移动指针;

  2. 这种方法无需处理某一指针移动至边界的情况;

图解

复杂度

  1. 时间复杂度:O(n),其中 n 是数组 nums 的长度;

  2. 空间复杂度:O(1),除了存储答案的数组以外,只需要维护常量空间;

代码实现

function sortedSquares(nums: number[]): number[] {
    let left = 0;
    let right = nums.length - 1;
    let res = new Array(right);
    // 初始索引
    let inx = right;

    while (left <= right) {
        // 获取 left、right 的平方
        let l = nums[left] ** 2;
        let r = nums[right] ** 2;

        if (l > r) {
            res[inx] = l;
            left++;
        } else {
            res[inx] = r;
            right--;
        }

        inx--;
    }

    return res;
};

参考资料

  1. 卡尔:《代码随想录》

打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 对撞指针
    1. 1.1. 解题思路
    2. 1.2. 图解
    3. 1.3. 复杂度
    4. 1.4. 代码实现
  2. 2. 参考资料