双指针
1 2 3 4 5 6 7 8 9 10 11
| 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; } };
|
因为是按顺序排列的,比较第一个数的绝对值和最后一个输的绝对值,然后把大的放到后面就行。
记得要新创建一个vector