3.977有序数组的平方
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
示例 2:
输入:nums = [-7,-3,2,3,11]
输出:[4,9,9,49,121]
//双指针
class Solution {
public int[] sortedSquares(int[] nums) {
int left = 0;
int right = nums.length-1;
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;
}
}
总结:左右各一个指针,同时索引初始位置在最后一位,比较两个位置平方后的大小,哪个大就把哪个位置的数放在新数组的索引位置,并且索引向前移动。哪个数使用了,对应位置就移动。
心得:要注意使用while循环,不要只想着用for
注意:本题创建数组
int[] result = new int[nums.length];

浙公网安备 33010602011771号