雙指針法經(jīng)典題目 | LeetCode:977.有序數(shù)組的平方

給你一個按?非遞減順序?排序的整數(shù)數(shù)組?nums
,返回?每個數(shù)字的平方?組成的新數(shù)組,要求也按?非遞減順序?排序。
示例 1:
輸入:nums = [-4,-1,0,3,10] 輸出:[0,1,9,16,100] 解釋:平方后,數(shù)組變?yōu)?[16,1,0,9,100] 排序后,數(shù)組變?yōu)?[0,1,9,16,100]
這里用雙指針的方式,這里一定是平方之后,最大值一定是在我們的兩側(cè)
數(shù)組由大到小更新,這里我們數(shù)組也要從大到小進行遍歷。
這里是i<=j,因為要是i<j就是把這個給落下了,當相等的時候也要把這個數(shù)放入我們的result數(shù)組中。

//暴力破解
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;
}