#数组有序的情况下考虑双指针法!
题目连接
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1: 输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100],排序后,数组变为 [0,1,9,16,100]
示例 2: 输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]
- 对于平方项需要考虑负数的存在!
- 双指针的终止条件为lfet==right也要进入循环!,所以while的条件为**(left<=right)**
参考代码:
class Solution {
public int[] sortedSquares(int[] nums) {
int i =0,j =nums.length-1,k=nums.length-1;
int a[] = new int [nums.length];
for(int p =0;p<=j;p++){
nums[p] =nums[p]*nums[p];
}
while(k>=0){
if(nums[i]>=nums[j]){
a[k] = nums[i];
k--;
i++;
}
else if(nums[i]<nums[j]){
a[k] = nums[j];
k--;
j--;
}
};
return a;
}
}