26.刪除排序陣列中的重複項
阿新 • • 發佈:2018-11-03
題目:刪除排序陣列中的重複項
給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 O(1) 額外空間的條件下完成。
思路:
1.陣列完成排序後,設定兩個指標 i 和 j,其中 j 是慢指標(記錄新陣列),而 i 是快指標(遍歷原先陣列)。
2.只要 nums[i] = nums[j],我們就增加 i 以跳過重複項,繼續遍歷。
3.當 nums[i] ≠ nums[j],並將 nums[i] 賦予 nums[j + 1]。
新陣列長度 + 1,並且將舊陣列的非重複元素賦予新陣列。
4.再次重複相同的過程,直到 j 到達陣列的末尾為止。
注意點:
1.陣列為空判斷。
2.遍歷時快指標從舊陣列下標 1 開始。
3.記錄的返回值 i (即新陣列的長度)需要 +1,因為新陣列的記錄從 0 開始,並未記錄。
程式碼:
public class demo27 { public static void main(String[] args) { int[] nums = {1,2,2,3,3}; int len = new Solution27().removeElement(nums); System.out.println(len); } } class Solution27 { public int removeElement(int[] nums) { int j = 0; // 判斷臨界條件,陣列為空狀態 if (nums.length == 0) { return 0; } for (int i = 1; i < nums.length; i++) { // 第 0 位和第 1 位進行比較,故 i 為 1 if (nums[j] != nums[i]) { j++; nums[j] = nums[i]; } } return j + 1; // 起始位置第 0 位需要加上 } }