思路:
双指针,left=0 right=number.size()-1
一定要注意while循环中条件是 left<=right 因为有可能如【-1,2,3】最后此时left=0 right=0; 这次我们需要加上
当然我们也可以 while(left <right) 只不过需要在后面单独拎出来判断一次,加上以下代码就可以了
while(left <right) {
res++;
.......
}
if(left==right)
{res++;
}
代码
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int res = 0;
int left = 0;
int right = nums.size() - 1;
while(left <=right) {
res++;
if(abs(nums[left])> abs(nums[right])) {
while(left <right&&abs(nums[left])==abs(nums[left+1]))
{
left++;
}
left++;
}
else if(abs(nums[left])< abs(nums[right])){
while(left < right&&abs(nums[right])==abs(nums[right-1]))
{
right--;
}
right--;
}else if(abs(nums[left])==abs(nums[right]))
{
// int leftIndex=left;
// int rightIndex=right;
while(left <right&&abs(nums[left])==abs(nums[left+1]))
{
left++;
}
left++;
while(left < right&&abs(nums[right])==abs(nums[right-1]))
{
right--;
}
right--;
}
}
cout<<res;
return nums;
}
};