0%

代码随想录第三天

数组-有序数组的平方

题目链接

1
2
3
4
5
6
7
8
9
class Solution {
public:
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;
}
};

如果用c++的话,如上的方法是最简单的,但是呢时间复杂度不符合进阶要求。

采用双指针方法,因为数组是有序的,头和尾的平方才有可能是最大值,不可能在中间,所以可以设定一个左指针和右指针,再定义一个数组来存放平方值,数组和原数组大小一样,设定一个k指针指向数组最终位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
int left = 0;
int right = nums.size() - 1;
int k = nums.size() - 1;
vector<int> result(nums.size(), 0);
while(left <= right){
if(nums[left] * nums[left] < nums[right] * nums[right]){
result[k--] = nums[right] * nums[right];
right--;
}
else{
result[k--] = nums[left] * nums[left];
left++;
}
}
return result;
}
};