【Lintcode】100. Remove Duplicates from Sorted Array

題目地址:

[https://www.lintcode.com/problem/remove-duplicates-from-sorted-array/description]

給定一個排序好的數組,要求in-place去重,返回去重後數組的長度。

可以用快慢雙指針。先令慢指針i=1i=-1,區間[0,i][0,i]表示已經去重的區間。快指針jj用於遍歷數組。當j=0j=0或者jj指向的數不等於ii指向的數時,就把jj指向的數加入去重的區間,同時拓展去重後的區間的右邊界。最後返回i+1i+1即可。代碼如下:

public class Solutiont {
    /*
     * @param nums: An ineger array
     * @return: An integer
     */
    public int removeDuplicates(int[] nums) {
        // write your code here
        if (nums == null || nums.length == 0) {
            return 0;
        }
    
        int i = -1;
        for (int j = 0; j < nums.length; j++) {
            if (j == 0 || nums[j] != nums[i]) {
                nums[++i] = nums[j];
            }
        }
        
        return i + 1;
    }
}

時間複雜度O(n)O(n),空間O(1)O(1)

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