two pointers

双指针

1
2
3
4
5
6
7
8
9
10
11
//Leetcode977
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
for (int i=0;i<nums.size();i++)
{
nums[i]=nums[i]*nums[i];
}
sort(nums.begin(),nums.end());
return nums;
}};

这题如果用双指针怎么写呢。

归并排序?

1
2
3
4
5
6
7
8
9
10
11
12
class Solution {
public:
vector<int> sortedSquares(vector<int>& A) {
vector<int> res(A.size());
int l = 0, r = A.size() - 1;
for (int k = A.size() - 1; k >= 0; k--) {
if (abs(A[r]) > abs(A[l])) res[k] = A[r] * A[r--];
else res[k] = A[l] * A[l++];
}
return res;
}
};
image

因为是按顺序排列的,比较第一个数的绝对值和最后一个输的绝对值,然后把大的放到后面就行。

记得要新创建一个vector