3.力扣题目:977. 有序数组的平方
解析:(双指针)
题目要求:给出按照 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
问题是给出的数组中如果有 负数 ,怎么办?
可以肯定的是,新数组的最大值,不是在数组开头的地方取到,就是在数组结尾的地方取得到。因为有负数的时候,数组两端的绝对值最大。
采用双指针,right指向数组开头,left指向数组末尾。并且定义一个新数组。
比较right指向的值的平方和left指向的值的平方的大小,取更大的值从新数组的末尾往前插入,并且更新right或者left指向的位置。
代码:
class Solution {
public int[] sortedSquares(int[] nums) {
int left = 0, right = nums.length-1, index = nums.length-1;
int[] result = new int[nums.length];
while (left <= right) {
if (nums[left] * nums[left] > nums[right] * nums[right]) {
result[index] = nums[left] * nums[left];
index--;
left++;
}
else {
result[index] = nums[right] * nums[right];
index--;
right--;
}
}
return result;
}
}