1. 程式人生 > >從排序陣列中刪除重複項

從排序陣列中刪除重複項

    閒來無事從網上找了一些題目做一下,於是就想把它寫成博文發出去。

    https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/1/array/21/

    LeetCode上的問題:

給定一個有序陣列,你需要原地刪除其中的重複內容,使每個元素只出現一次,並返回新的長度。

不要另外定義一個數組,您必須通過用 O(1) 額外記憶體原地修改輸入的陣列來做到這一點。

示例:

給定陣列: nums = [1,1,2],

你的函式應該返回新長度 2, 並且原陣列nums的前兩個元素必須是1和2
不需要理會新的陣列長度後面的元素

首先這有一個很重要的前提 有序陣列

也就是說[1,1,2];[1,1,1,2,3,4,5][1,2,2,3,4,4,4,5,6],[1,3,3,5,6,6] 這些都是有序陣列,不過是從小到大的有序陣列偷笑(別在這裡進坑)。所以這就可以用到快慢指標(就可以理解成倆個尋找的指標所在的地方不同,一個總比裡一個快,為什麼呢?因為你要和前後對比呀!!!)來做。

 private static int RemoveDuplicates(int[] nums)
        {
            int slow = 0;
            int count = 0;
            for (int fast = 0; fast < nums.Length; fast ++ ){
                if(nums [slow] != nums[fast]){
                    slow++;
                    nums[slow] = nums[fast];
                    count++;
                }
            }
            return count;
        }

這就是給出的程式碼核心委屈,這裡是讓快指標遍歷陣列,慢指標作為儲存用。但是好像有問題!count應該輸出為2,但是輸出了1,不信你試試。其實很簡單就是對比的時候忘了把自己加上。

int count =1 ;  //這樣宣告就可以嘍