双层循环
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;
}
};
双指针法
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int size = nums.size();
// 初始化大小为size,否则报错
vector<int> result(size);
int i = 0;
int j = size - 1;
int pos = size - 1 ;
while(i <= j) {
if(nums[i] * nums[i] < nums[j] * nums[j]) {
// vector可直接按照下标进行处理,也可使用push_back方法
result[pos] = nums[j] * nums[j];
pos--;
j--;
}
else {
result[pos] = nums[i] * nums[i];
pos--;
i++;
}
}
return result;
}
};
双指针法:数组平方之后的最大数只可能出现在两端。采用双指针分别记录数组头,数组尾 创建一个结果数组保存结果vector result(size),注意这里需要初始化大小 将pos直接指向数组尾部,将原数组较大值直接放在result数组尾部,同时pos--