有序数组的排序-双指针法
题目:给你一个按非递减顺序排序的整数数组nums,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
难度:==简单==
题解思路:数组是有序的,最大值只能在数组的两端。使用对撞指针,i指向起始位置,j指向最终位置。设置一个result数组,数组长度为
nums.zise()
,k指向最后的位置。
那么有以下两种情况:
当nums[i]*nums[i] < nums[j][j]
,那么result[k--] = nums[j]*nums[j]
,且j--
;
当nums[i]*nums[i] > nums[j][j]
,那么result[k--] = nums[i]*nums[i]
,且i++
。
int i = 0, j = nums.size()-1;
vector<int> v(j+1,-1);
int k = j;
while (i <= j){
if(nums[i]*nums[i] < nums[j]*nums[j]){
result[k--] = nums[j]*nums[j];
j--;
}
else{
result[k--] = nums[i]*nums[i];
i++;
}
}
return result;
注意:看了代码随想录的文章之后写的,不是原创(完全抄啦)