刪除排序數組中的重複項

給定一個排序數組,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後數組的新長度。

不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成

示例一:

給定數組 num = [1,1,2],

函數應該返回新的長度2 , 並且原數組num的前兩個元素被修改爲 1,2

示例二:

給定數組 num = [0,0,1,1,1,2,2,3,3,4],

函數應該返回新的長度5, 並且原數組num的前兩個元素被修改爲 0, 1, 2, 3, 4

 

算法分析:

利用雙指針,數組完成排序後,我們可以放置兩個指針 i 和 j,其中 i 是慢指針,而 j 是快指針。

只要 nums[i] = nums[j],就增加 j 以跳過重複項。

當遇到 nums[j] ≠ nums[i] 時,跳過重複項的運行已經結束,因此必須把它(nums[j])的值複製到 nums[i+1]。

然後遞增 i,接着將再次重複相同的過程,直到 j 到達數組的末尾爲止。

 

public static int remove(int[] num) {
		
		if(num.length == 0) return 0;
		
		int i = 0;
		
		for(int j = 1 ; j<num.length ; j++){
			
			if(num[j] != num[i]){

				i++;
				
				num[i] = num[j];
			}
		}
		return i+1;
	}

 

 

 

 

 

 



 

 







 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章