思路 这题目中文描述是真的2,非要反着描述, 非递减顺序的数组, 那不就是递增的数组吗
- 需要思考的点就是 最小的负数平方之后会发生变化, 负负得正,可能变成最大数
- 这样其实我们需要两个指针, 一个指向最左边, 一个指向最右边, 分别平方后,来比较他们的大小
- 创建一个新的数组,大小和nums一样, 创建一个索引k , 丛新数组的末位开始 k = 新数组的最大索引值
- 对比平方后的值, 如果
if (nums[left] * nums[left] > nums[right] * nums[right])
我们就将nums[left]的值放入新数组的最后面 k下标对应的位置 数组[k] = nums[left] *nums[left], left++ k--
-
if (nums[left] * nums[left] <= nums[right] * nums[right])
将nums[right]放入新数组中k--, right向前移动一位 right--
- 当left和right相遇时, 是同一个数, 剩下最后一位,放入新数组[k]即完成
public int[] sortedSquares(int[] nums) {
int[] result = new int[nums.length];
int left = 0;
int right = nums.length -1;
int k = right;
while (left <= right) {
if (nums[left] * nums[left] > nums[right] * nums[right]) {
result[k--] = nums[left] * nums[left];
left++;
} else {
result[k--] = nums[right] * nums[right];
right--;
}
}
return result;
}