有序数组的平方

实际上需要考虑的是两个数组的按序合并,思路还是双指针法,很容易想到合并后数组的最大值只会在最左边或者最右边,而去掉这个元素后也是一样的操作。因此左指针从负数的最大值即最左边开始,右指针从正数的最大值即最右边开始,比较后更新位置。
这里需要想清楚的是结束条件,实际上更新位置后剩下的元素都是未并入的,因此最后左右指针一定是会相遇的,也即只剩下一个元素。因此结束条件是左右指针位置相同时。
代码如下:

class Solution {
public:
    vector<int> sortedSquares(vector<int>& nums) {
        int n = nums.size()-1;
        vector<int>result(nums.size(),0);
        int left = 0;
        int right = n;
         for(int left = 0, right = n; left <= right; ){
            if(nums[left] * nums[left] < nums[right] * nums[right]){
                result[n--] = nums[right] * nums[right];
                right--;
            }
            else{
               result[n--] = nums[left] * nums[left];
                left++;
            }
         } 
       return result;
    }
};
posted @ 2024-10-09 21:27  名字好难想zzz  阅读(14)  评论(0)    收藏  举报