- 看到题图首先想的方法是暴力解法,对数组的每个数进行平方,然后排序。代码如下:
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;
}
};
- 第二种方法参考了 代码随想录 中的双指针法
- 最初使用双指针法解题时,没有单独使用一个pos来记录插入的位置,而是插入i或j的位置,导致输出的数组错误。
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int size = nums.size();
int i = 0;
int j = size - 1;
int pos = size -1;
vector<int> v(size);
for(i; i <= j;){
if(nums[i] * nums[i] > nums[j] * nums[j]){
v[pos] = nums[i] * nums[i];
i++;
}else {
v[pos] = nums[j] * nums[j];
j--;
}
pos--;
}
return v;
}
};