实际上需要考虑的是两个数组的按序合并,思路还是双指针法,很容易想到合并后数组的最大值只会在最左边或者最右边,而去掉这个元素后也是一样的操作。因此左指针从负数的最大值即最左边开始,右指针从正数的最大值即最右边开始,比较后更新位置。
这里需要想清楚的是结束条件,实际上更新位置后剩下的元素都是未并入的,因此最后左右指针一定是会相遇的,也即只剩下一个元素。因此结束条件是左右指针位置相同时。
代码如下:
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;
}
};
标签:平方,数组,nums,int,最大值,有序,left,指针
From: https://www.cnblogs.com/gqzz/p/18455191