双指针法
leetcode:977.有序数组的平方为例
数组本身是有序的,但是负数平方之后可能变为了最大值
此时,整个数组中的数值进行平方之后,就会存在于两端,即左端或者右端
双指针法中自定义量含义如下:
i 指的是起始位置
j 指的是终止位置
result 指的是定义的新数组,和题目中的原始数组A的长度一样
k 指的是result数组的终止位置,在不断变化
如果A[i] * A[i] < A[j] * A[j]
那么result[k--] = A[j] * A[j];
如果A[i] * A[i] >= A[j] * A[j]
那么result[k--] = A[i] * A[i];
class Solution {
public int[] sortedSquares(int[] nums) {
int left = 0;//i值
int right = nums.length - 1;//j值
int[] result = new int[nums.length];//新的数组result
int index = result.length - 1;//k值
while (left <= right) {
if (nums[left] * nums[left] > nums[right] * nums[right]) {
result[index--] = nums[left] * nums[left];
++left;
} else {
result[index--] = nums[right] * nums[right];
--right;
}
}
return result;
}
}