LeetCode(力扣)有序陣列的平方之雙指標解法Java
阿新 • • 發佈:2020-12-22
技術標籤:演算法學習#陣列leetcodejava演算法雙指標資料結構
題目要求:
給定一個按非遞減順序排序的整數陣列 A,返回每個數字的平方組成的新陣列,要求也按非遞減順序排序。
示例 1:
輸入:[-4,-1,0,3,10]
輸出:[0,1,9,16,100]
示例 2:
輸入:[-7,-3,2,3,11]
輸出:[4,9,9,49,121]
思路:
觀察題目,可以發現,因為已知陣列是升序排列的,那也就是說,當原陣列平方後,以0為中心,之前的負數部分是降序排列的,之前的正數部分仍然是升序排列。這也就相當於,平方後,陣列變成了兩頭大中間小的情況,並且是依次從兩頭往中間遞減,因此,可以使用雙指標法解此問題。
程式碼:
需要注意的一點是,我自己犯過的錯誤,while迴圈的判斷需要是<=,我之前寫的是<,結果當左右指標相同時,進不去迴圈,相當於最後少一個數,這個小細節注意一下。
public static int[] sortedSquares(int[] nums) {
int[] result=new int[nums.length];
int left=0;
int right=nums.length-1;
int index=nums.length-1;
while (left<=right){
int l=nums[left]*nums[left];
int r=nums[right]*nums[right];
if(l<r){
result[index]=r;
right--;
}else {
result[ index]=l;
left++;
}
index--;
}
return result;
}