1. 程式人生 > >刪除排序數組中的重復項

刪除排序數組中的重復項

分享圖片 blank cat ref 簡單 bottom math alt mage

分享簡單算法:刪除排序數組中的重復項

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

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

示例 1:

技術分享圖片

語言:java

public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i = 0;
for (int j = 1; j < nums.length; j++) {
if (nums[j] != nums[i]) {
i++;
nums[i] = nums[j];
}
}
return i + 1;
}

數組完成排序後,我們可以放置兩個指針 i 和 j,其中 i 是慢指針,而 j 是快指針。只要 nums[i]=nums[j],我們就增加 j 以跳過重復項。

當我們遇到 nums[j]nums[i] 時,跳過重復項的運行已經結束,因此我們必須把它(nums[j])的值復制到 nums[i + 1]。然後遞增 i,接著我們將再次重復相同的過程,直到 j 到達數組的末尾為止。

時間復雜度:O(n)

註意:整理一遍數組,重復值直接跳過,不重復的 就歸入數組。

刪除排序數組中的重復項