刪除排序數組中的重復項
阿新 • • 發佈:2018-08-03
分享圖片 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)
註意:整理一遍數組,重復值直接跳過,不重復的 就歸入數組。
刪除排序數組中的重復項