演算法百題之五十七 刪除排序陣列中的重複項

2021-10-14 11:14:59 字數 1080 閱讀 5203

很高興又能和大家見面了,接下來準備系列更新的是演算法題,一日一練,早日公升仙!

今天的問題是:刪除排序陣列中的重複項,要求時間複雜度是o(1)

示例:

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

思路:這道是比較簡單,考察的點是對vector迭代器刪除函式的呼叫,我們只需要一次迴圈,利用乙個map記錄已經出現的數,若在map中找不到當前迴圈的數nums【i】,則把這個數用map記錄下來,並判斷下乙個數。若已經在map中被記錄了,那麼呼叫erase函式刪除該元素即可演算法**:

int removeduplicates(vector& nums) 

else

} return num;

}

這裡有乙個注意的地方:呼叫erase()函式後,vector後面的元素會向前移位,此時原先的迭代器已經失效。所以這樣寫是不對的

int removeduplicates(vector& nums) 

else

} return num;

}

測試結果:

演算法之刪除排序陣列中的重複項

題目 給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。解答 class solution nums.erase nums.begin i,nums.begin n...

演算法題3 刪除排序陣列中的重複項

一開始,想用傳統的解法,遞迴陣列,當當前陣列值與前乙個陣列不同時,將其後所有陣列元素向前移動一位,numsize numsize 1。時間複雜度是o n 2 後面重新閱讀提議,發現對陣列新長度後面的元素不做要求。想到了新解法 也是與初識方法一樣,遞迴陣列,但是我加了乙個引數 res 給其賦初值為1,...

陣列(簡單題) 刪除排序陣列中的重複項

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