1. 程式人生 > >26.刪除排序陣列中的重複項

26.刪除排序陣列中的重複項

題目:刪除排序陣列中的重複項
給定一個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 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 位需要加上
    }
}