Leetcode刪除排序陣列中的重複項演算法與分析

2021-09-25 06:35:13 字數 1847 閱讀 8616

@leetcode刪除排序陣列中的重複項

這是個很經典的入門題,需要你在不開闢新的陣列空間的情況下將陣列中重複的單元刪除並返回陣列的新長度,廢話少說,讓我們來看看題幹:

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

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

示例 1:

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

函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。

你不需要考慮陣列中超出新長度後面的元素。

示例 2:

給定 nums = [0,0,1,1,1,2,2,3,3,4],

函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0, 1, 2, 3, 4。

你不需要考慮陣列中超出新長度後面的元素。

說明:

為什麼返回數值是整數,但輸出的答案是陣列呢?

請注意,輸入陣列是以「引用」方式傳遞的,這意味著在函式裡修改輸入陣列對於呼叫者是可見的。

你可以想象內部操作如下:

// nums 是以「引用」方式傳遞的。也就是說,不對實參做任何拷貝

int len = removeduplicates(nums);

// 在函式裡修改輸入陣列對於呼叫者是可見的。

// 根據你的函式返回的長度, 它會列印出陣列中該長度範圍內的所有元素。

for (int i = 0; i < len; i++)

題幹真的是很長很囉嗦啊,但是他若不這麼說,你肯定會犯不少裡面說的禁忌,或者根本不明白為什麼要這麼做。然而乙個好的coder,即使是小白,也要明白為什麼題目會這樣要求,而不是蒙著頭就去完成題目的需求。

那麼題目既然要求返回刪除重複元素之後的表長,聰明的coder肯定能想到題目的言下之意:算算陣列裡有多少個互不相同的元素。筆者很蠢,是看了解答之後才知道有這麼個投機取巧的方法的。既然有巧方法,那肯定也有笨辦法:挨個比較多重迴圈判斷,然後刪除、冒泡、刪除 、冒泡、刪除…於是乙個**小白的心態就這樣被自己玩崩了。

我們來看看最容易的方法:

方法雖簡單,我們還是要把我其中思想和細節。首先必須要做的事情是判斷給的陣列是不是空陣列,如果我沒記錯,應該第三個測試樣例就是乙個空陣列,如果你的判斷條件沒寫,或者不是寫在最開頭,換句話說就是進入了陣列判斷的部分,就會error。

把握本題的關鍵在於陣列是有序的,如果是個無序陣列,我們一定要將其排序之後才能進行運算。判斷完了空之後我們以第乙個元素為基準元素,使他和之後的每個元素進行比較,如果之後的元素與他相同,那就什麼都不會發生,要是不同,我們就將這個不同的元素變成基準元素,同時根據已經出現的不同元素的個數,將陣列中的代表這個個數的位置的值改變成這個新的基準元素。這樣做既保證了統計不同元素的個數,又修改了陣列,一舉兩得。如果你的cou初始化為0,那麼你就要改變後面cou++的位置調到陣列賦值語句之前,才能使得計算沒有偏差。

另外帶上一句,還有一種複雜的方法,上面的方法是在判斷出不同元素時執行操作,而稍複雜一點的另一種方法則是真實地去掉每乙個重複的元素,即將每乙個重複的元素利用氣泡排序將其放置到陣列的末尾再統一清除,剩下的陣列就是答案。這種方法思路十分直接,但是想要**通過需要注意不少細節問題,考察coder的基本功,筆者在此先不做編寫,希望有和筆者一樣的小白日後改善之後進行補充!

LeetCode 陣列 刪除排序陣列中的重複項

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 給定 nums 0,0,1,1,1,2,2,3,3,4 函式應該返回新的長度 5,並且原陣列 nu...

Leetcode題解026 刪除排序陣列中的重複項

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1...

LeetCode 從排序陣列中刪除重複項

給定乙個有序陣列,你需要原地 刪除其中的重複內容,使每個元素只出現一次,並返回新的長度。不要另外定義乙個陣列,您必須通過用 o 1 額外記憶體原地修改輸入的陣列來做到這一點。示例 給定陣列 nums 1,1,2 你的函式應該返回新長度 2,並且原陣列nums的前兩個元素必須是1和2 不需要理會新的陣...