LeetCode 977. 有序数组的平方

80 阅读1分钟

使用双指针!

解题思路:由于是存在正负.因此中间的值一定小于两端中的一端.

将双指针指向数组两端,然后平方进行比较,将较大的值放入新数组的尾部,然后该指针向中间一位.直到左右两个指针碰撞完while(x≤y).

s3.us-west-2.amazonaws.com/secure.noti…

public int[] sortedSquares(int[] nums) {
        // 双指针的起始位置为数组的左右两端(由于有正负,因此数组中间的值一定小于两端的值)
        int x = 0;
        int y = nums.length-1;
        int[] newNum = new int[nums.length];
        int i = nums.length -1;
        // 当左指针大于右指针(碰撞后继续执行),循环结束
        while (x <= y) {
            // 对左右两端的数进行平方比较,大的一个放入新的数组中,并且指针往中间移一位.
            int xs = nums[x] * nums[x];
            int ys = nums[y] * nums[y];
            if (ys > xs) {
                //右边的值比较大,将右边的值放入新数组,并且指针向前移
                newNum[i] = ys;
                y --;
            } else {
                newNum[i] = xs;
                x ++;
            }
            i --;
        }
        return newNum;
    }

image.png