Leetcode977. 有序数组的平方

发布于 2024-07-28  359 次阅读


已经思考出双指针的核心了,就差临门一脚,因为最初使用的是双指针比较将较小的数填入结果数组,然后发现第一次比较两个数得到的结果不是整个数组中最小的数,就陷入停滞了,没有考虑到这样比较得到的最大的数是准确的,只需要逆向填入结果数组即可

代码如下

    public int[] sortedSquares(int[] nums) {
        int left= 0;
        int right = nums.length - 1;
        int[] result = new int[nums.length];
        int i = nums.length - 1;
        boolean isleft = true;
        int a1 = 0;
        int a2 = nums[nums.length - 1] * nums[nums.length - 1];
        while(left <= right){
            if(isleft) {
                a1 = nums[left] * nums[left];
            }else {
                a2 = nums[right] * nums[right];
            }
            if(a1 < a2){
                result[i] = a2;
                i--;
                right--;
                isleft = false;
            }
            else {
                result[i] = a1;
                i--;
                left++;
                isleft = true;
            }
        }
        return result;
    }