双指针法经典题目 | LeetCode:977.有序数组的平方
2023-06-08 16:03 作者:多喝热水Eliauk | 我要投稿

给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为 [16,1,0,9,100] 排序后,数组变为 [0,1,9,16,100]
这里用双指针的方式,这里一定是平方之后,最大值一定是在我们的两侧
数组由大到小更新,这里我们数组也要从大到小进行遍历。
这里是i<=j,因为要是i<j就是把这个给落下了,当相等的时候也要把这个数放入我们的result数组中。

//暴力破解
public int[] sortedSquares(int[] nums) {
for (int i = 0; i < nums.length; i++) {
nums[i] = nums[i]*nums[i];
}
Arrays.sort(nums);
return nums;
}
//双指针
public int [] sortedSquares2(int[] nums){
int i = 0;
int j = nums.length-1;
int k = nums.length-1;
int [] result = new int[nums.length];
for (i = 0;i<=j;){
if(nums[i]*nums[i]>nums[j]*nums[j]){
result[k]=nums[i]*nums[i];
i++;
k--;
}else{
result[k]=nums[j]*nums[j];
j--;
k--;
}
}
return result;
}