欢迎光临散文网 会员登陆 & 注册

双指针法经典题目 | 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;

}

双指针法经典题目 | LeetCode:977.有序数组的平方的评论 (共 条)

分享到微博请遵守国家法律