抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。


思路

  • 左右指针
  • 注意非递减排序条件,存在负数,那么可能中间存在 0,他的左边从左到右为递减,他的右边从右到左为递减,可以采用左右指针,类似于归并的思路进行排序

学习点

  • 左右指针
  • 注意边界条件!!

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
class Solution {
public:
vector<int> sortedSquares(vector<int>& nums) {
// **非递减顺序**
int len = nums.size();
vector<int> res(len);

// 左右指针
int left = 0;
int right = len - 1;
int pos = len - 1;
// left <= right,这样才是写入了 5 次数据
// 如果是 left < right,
// 这时候循环内最后加入的数只能是 left 或者 right
// 有一个还没有被处理
for (; left <= right; )
{
int left_square = nums[left] * nums[left];
int right_square = nums[right] * nums[right];
if (left_square > right_square)
{
res[pos] = left_square;
left++;
}
else
{
res[pos] = right_square;
right--;
}
pos--;
}

return res;
}
};