力扣977. 有序数组的平方

104 阅读1分钟

#### 977. 有序数组的平方

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

image.png

思路

数组可以看做是有序排列的,平方后负数可能会大于正数,但是在平方后最大的数肯定在数组的两边,因此可以采用双指针,分别指向数组头尾。

public:
    vector<int> sortedSquares(vector<int>& nums) {
        vector<int> result(nums.size(), 0);//定义一个同样长度的容器
        int k = nums.size() - 1;//从新定义的容器最后开始填
        for(int i=0, j=nums.size()-1; i<=j;)//i指向第一位元素,j指向最后一位元素,i>j的时候退出循环,
        {
            if(nums[i] * nums[i] > nums[j] * nums[j])//哪一位元素平方大,就将他存入新容器,从容器后面开始存
            {
                result[k--] = nums[i] * nums[i];
                i++;//存储完毕后,该指针向后移位
            }
            else
            {
                result[k--] = nums[j] * nums[j];
                j--;//存储完毕后,该指针向前移位
            }
        }
        return result;
      
    }
};