一、暴力法
vector<int> sortedSquares(vector<int>& nums) {
for(int i=0; i < nums.size(); i++) {
nums[i] *= nums[i];
}
sort (nums.begin(),nums.end());
return nums;
}
时间复杂度(n+logn),n为for循环遍历一遍,nlogn是sort函数
二、双指针
头指针从头开始,尾指针从尾开始,比较大小,头指针的元素平方大,指针后移;尾指针的元素平方大,指针前移,直到指针相遇。
vector<int> sortedSquares(vector<int>& nums) {
int n = nums.size();
int head = 0, tail = n - 1, end = n - 1;
vector<int> result(n);
while (head <= tail) {
if(nums[head] * nums[head] > nums[tail] * nums[tail]) {
result[end--] = nums[head] * nums[head];
head++;
}
else {
result[end--] = nums[tail] * nums[tail];
tail--;
}
}
return result;
}
时间复杂度为O(n),遍历一遍数组。