977. 有序数组的平方
题目标签:数组,双指针
题目简述:将一个非递减的数组,平方之后,也按照非递减顺序排列
相似题目:
-
解题思路:
- 数组其实是有序的, 只不过负数平方之后可能成为最大数了。
- 那么数组平方的最大值就在数组的两端,不是最左边就是最右边,不可能是中间。
- 此时可以考虑双指针法了,i指向数组start,j指向数组的end——依次向中间遍历。哪个数的平方大,谁就先排在后面
- 定义一个新数组result,和A数组一样的大小,让k指向result数组终止位置。
- if
A[i] * A[i] < A[j] * A[j]
elseresult[k--] = A[j] * A[j];
。 - if
A[i] * A[i] >= A[j] * A[j]
elseresult[k--] = A[i] * A[i];
。
-
代码:
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int size = nums.size();
vector<int> res(size, 0);
int i = 0;
int j = nums.size() - 1;
while(i <= j) {
if(nums[i]*nums[i] > nums[j]*nums[j]) {
res[-- size] = nums[i]*nums[i];
i ++;
}
else {
res[-- size] = nums[j]*nums[j];
j --;
}
}
return res;
}
};