问题描述:给你一个按 非递减顺序 排序的整数数组 nums
,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
题目链接:. - 力扣(LeetCode)
两种解决思路:
1.直接平方+快排(日常解题中的惯性思维)
2.双指针(为了通过工作笔试不得不培养的思维)
题目中明确表示了该数组是按非严格递增的顺序进行排序的,因此利用好这个条件,也就是从侧边反映了该数组平方之后的最大值就是在数组的两端边界处。即可将双指针放在数组的一头一尾,后续慢慢收缩即可。
提示就到这边啦,如果还是不理解或者代码敲不出来的伙伴,可以前往代码随想录,查看Carl大神的具体讲解与操作。
这是我理解之后敲的代码,与Carl不同的是循环条件的不同,因人而异,我个人感觉我的比较容易理解一些(毕竟是自己理解过后的)
class Solution {
public int[] sortedSquares(int[] nums) {
int[] res=new int[nums.length];
int k=nums.length-1;
int i=0;
int j=nums.length-1;
while(i<=j){
if(nums[i]*nums[i]<nums[j]*nums[j]){
res[k]=nums[j]*nums[j];
k--;
j--;
}else{
res[k]=nums[i]*nums[i];
k--;
i++;
}
}
return res;
}
}