
原题链接
- 首先定义一个数组res用来存储平方之后的数组值
- 因为将数组中的值平方之后的值,应该是最大值分布在开头和结尾,不可能分布在中间位置,因此只需比较开头结尾的值
- .定义 left right分别指向开头结尾
- 使用k保存 数组的长度,将每次 nums[left] * nums[left] nums[right] * nums[right]比较的值加入到k的位置,每次加入后,应该使k–
- 若是 nums[right] 的平方较大,则将right–
- 反之将left++
- 最终返回结果数组res
- 二刷:定义 res的索引 k ,每当给k 赋值后,就将k-- ,若是nums[right] * nums[right] 较大,则right- -,反之,left++
- 要注意while的条件是 left <= right 内部的判断条件也带有 = 号
class Solution {
public int[] sortedSquares(int[] nums) {
int[] res = new int[nums.length];
int left = 0;
int right = nums.length - 1;
int k = res.length - 1;
while(left <= right){
if(nums[left] * nums[left] <= nums[right] * nums[right]){
res[k] = nums[right] * nums[right];
k--;
right--;
}else{
res[k] = nums[left] * nums[left];
k--;
left++;
}
}
return res;
}
}