日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

每天一道LeetCode-----从有序数组中删除重复元素

發布時間:2024/4/19 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 每天一道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-----从有序数组中删除重复元素的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。