力扣977题(有序数组的平方)
977、有序数组的平方
基本思想:
双指针法
左右指针
具体实现:
1、数组是有序的,但是负数平方后可能会变大
2、数组平方后的最大值在数组的最右端或者最左端
3、left指向数组起始位置,right指向数组终止位置
4、定义一个和原始数组一样大的新数组result
5、定义一个指针指向result的终止位置
6、如果nums[left]的平方小于nums[right]的平方,result[index--] = nums[right]的平方
7、right往左移,left不动
代码:
class Solution { public int[] sortedSquares(int[] nums) { int right = nums.length -1; int left = 0; int[] result = new int[nums.length]; int index = result.length - 1; 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; } }
class Solution { public int[] sortedSquares(int[] nums) { int[] result = new int[nums.length]; int i = 0; int j = nums.length - 1; for (int k = nums.length - 1; k >= 0; k--) { if (nums[i] * nums[i] > nums[j] * nums[j]) { result[k] = nums[i] * nums[i]; i++; } else { result[k] = nums[j] * nums[j]; j--; } } return result; } }