每天一道LeetCode-----从有序数组中删除重复元素
生活随笔
收集整理的這篇文章主要介紹了
每天一道LeetCode-----从有序数组中删除重复元素
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Remove Duplicates from Sorted Array
原題鏈接Remove Duplicates from Sorted Array
給定一個有序數組,對于數組中的重復項,只需要保留一個,其余的都刪掉
和每天一道LeetCode—–移除有序鏈表中的重復節點類似
只需要記錄當前找到的元素,當再遍歷到一個元素時,如果和之前找到的元素一樣,就丟掉
代碼如下
class Solution { public:int removeDuplicates(vector<int>& nums) {int prev = 0;for(auto& n : nums){/* prev - 1是上一個找到的元素,如果和它相等,就丟掉 */if(prev == 0 || n != nums[prev - 1])nums[prev++] = n;}return prev;} };Remove Duplicates from Sorted Array II
原題鏈接Remove Duplicates from Sorted Array II
允許保留兩個重復元素
令prev指向下一個元素應該存放的位置,初始為0,假設當前遍歷到一個元素,那么它前面兩個位置分別是prev - 1和prev - 2
考慮nums[prev-2],如果當前遍歷到的元素和nums[prev-2]相等,說明是第三個重復元素,應該丟掉。如果當前遍歷到的元素大于nums[prev-2](因為遞增),那么就可以將其添加到結果中
代碼如下
class Solution { public:int removeDuplicates(vector<int>& nums) {int prev = 0;for(auto& n : nums){/* 開始兩個可以添加,后面的需要和它前面兩個比較 */if(prev < 2 || n > nums[prev-2])nums[prev++] = n;}return prev;} };這兩道題主要需要想到如果判斷當前遍歷到的元素是否滿足條件,對于只保留一個的,那么和nums[prev-1]比較即可,對于保留兩個的,那么只需要和nums[prev-2]比較。因為prev指向的是當前遍歷到的元素應該插入的位置,所以nums[prev-1]和nums[prev-2]分別表示它之前的元素和之前的之前的元素:)
總結
以上是生活随笔為你收集整理的每天一道LeetCode-----从有序数组中删除重复元素的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 每天一道LeetCode-----移除有
- 下一篇: 每天一道LeetCode-----在字符