天天看點

LeetCode - 26 删除排序數組中的重複項

題目

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

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

思路

1 不需要額外數組,直接修改原數組,是以不能new int[array.length]記錄獨立的數值

2 需要記錄一個索引index來儲存确定好了的不重複的位置

3 num[i++] 這種表示都是先試用後加,意思是初始i = 0 ,執行的第一次是指派給第1個數組位置的值

代碼

1 注釋掉的第一次我寫的,我用了temp來存儲目前不重複的數字的值,然後與周遊到的值比較,并且更新這個值。

大牛寫的時候并沒有用到這個臨時變量,而是直接取到索引位置的那個值。

public int removeDuplicates(int[] nums){
        int i = 0;
        for(int n : nums){
            if(i == 0|| n != nums[i-1]){
                nums[i++] = n;
            }
        }
        return i;
        /*if(nums.length==0){
            return 0;
        }
        int num = 1;
        int temp = nums[0];
        for(int i=1;i<nums.length;i++){
            if(nums[i]==temp){

            }else{
                nums[num]=nums[i];
                num++;
                temp=nums[i];
            }
        }
        return num;*/
    }