class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
vector<int> result(nums.size());
int k=nums.size()-1;
for(int i=0,j=k;i<=j;)//i++与j--的操作不能放在这里,i<=j有等于
{
if(nums[i]*nums[i]>nums[j]*nums[j]){
result[k]=nums[i]*nums[i];
k--;
i++;
}
else{
result[k]=nums[j]*nums[j];
k--;
j--;
}
}
return result;
}
};
两个指针一个在头一个在尾,因为对于一个有序数组,即使它有复数,那么最大值也只能是两端的元素。所以从两头向中间遍历,比较。时间复杂度O(n)。注意i++与j--的操作不能放在for()中,做++与--是有条件的。注意for中判断条件要i<=j,这样不会漏掉i=j时的元素。