数组 - 977. 有序数组的平方 - 代码随想录

69 阅读1分钟

题目链接:977. 有序数组的平方

题目介绍

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序

双指针法

数组其实是有序的, 只不过负数平方之后可能成为最大数。

所以数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。

Java代码

class Solution {
    public int[] sortedSquares(int[] nums) {
        int left = 0, right = nums.length - 1;
        int[] res = new int[nums.length];
        int k = nums.length - 1;
        while (left <= right) {
            if (nums[left]*nums[left] > nums[right]*nums[right])
                res[k--] = nums[left]*nums[left++];
            else
                res[k--] = nums[right]*nums[right--]
        }
        return res;
    }
}
  • 时间复杂度:O(n)