[leetcode數(shù)組系列]3 刪除排序數(shù)組中的重復項

前言

秋招的結(jié)束,面試了大大小小的公司,最大的問題在于算法上。所以打算堅持在leetcode打卡,看看到底能不能行,如果你想見證,那我來開車,你坐穩(wěn),一起走向更好的遠方。2020=1024+996,準備好了?

一 題目

[26 刪除排序數(shù)組中的重復項]

給定一個排序數(shù)組,你需要在原地刪除重復出現(xiàn)的元素,使得每個元素只出現(xiàn)一次,返回移除后數(shù)組的新長度。不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。

示例1

給定數(shù)組 nums = [1,1,2],

函數(shù)應(yīng)該返回新的長度 2, 并且原數(shù)組 nums 的前兩個元素被修改為 1, 2。

你不需要考慮數(shù)組中超出新長度后面的元素。

示例2

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

函數(shù)應(yīng)該返回新的長度 5, 并且原數(shù)組 nums 的前五個元素被修改為 0, 1, 2, 3, 4。

你不需要考慮數(shù)組中超出新長度后面的元素。

2 思路1---快慢指針

這里注意審題,數(shù)組本身已經(jīng)排序,重復的數(shù)字就是連續(xù)的喲。

我們先定義兩個指針,慢指針i和快指針,如果num[i]=num[j],我們就讓快指針j跳過重復項。如果num[i]!=num[j],那么久=nums[i++]=num[j],然后同時前進下面我們看看圖。

在這里插入圖片描述
class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size()==0) return 0;
        int i=0;
        for(int j=1;j<nums.size();j++)
        {
            if(nums[j]!=nums[i])
            {
               
                nums[i+1]=nums[j]; 
                i++;
            }
        }
        return i+1;
    }
};

3 思路1優(yōu)化

如果我們的排序數(shù)組沒有重復的元素,按照上面的思路我們會出現(xiàn)多余的復制操作,所以借此可以優(yōu)化一下。當num[i]!=nums[j],而且j-i>1的時候我們才進行復制,如下圖所示。


在這里插入圖片描述

優(yōu)化后的代碼

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        if(nums.size()==0) return 0;
        int i=0;
        for(int j=1;j<nums.size();j++)
        {
            if(nums[j]!=nums[i])
            {
               if(j-i>1)
               {
                    nums[i+1]=nums[j];
               }
                 
                i++;
            }
        }
        return i+1;
    }
};

4 總結(jié)

今天學習了快慢指針去掉重復數(shù)的問題,在后面還會遇到指針相遇等問題也會有類似的思路喲!

希望讀者和咱一起一步一個腳印去把基礎(chǔ)知識打牢固。如果讀者發(fā)現(xiàn)有什么錯誤或者不太好的地方,歡迎私我,我會及時修改,同時如果覺得文章不錯請點擊右下角的在看或者轉(zhuǎn)發(fā)分享給身邊的小伙伴喲。關(guān)注就有免費書籍和視頻喲!

image
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 落枕好幾天,晚上輾轉(zhuǎn)反側(cè)難以入睡,白天咳嗽打噴嚏脖子肩膀都疼。 今天辦公室請了中醫(yī)大夫來,說可以針灸和刮痧按摩兩種...
    麗麗_8228閱讀 100評論 0 0
  • 三伏天氣,閑看衛(wèi)星地圖,鼠標就奇怪地移到了西貢,然后放大,然后就看見一些河流、街道、酒店,就有了整理一下這段游記的...
    左民山人閱讀 213評論 0 0
  • 因為腳傷的原因今天一天沒出門,孩下午的歌唱比賽也沒辦法參加,放學后爸爸接去奶奶家,諾諾說想在奶奶家寫完作業(yè)再回家,...
    拾一片光陰閱讀 248評論 0 1
  • 我不用大學生來自我介紹,但是確確實實是一名不合格的大學生。作為這個社會的新生兒,作為所有家長眼里什么都不能做,什么...
    玉佳閱讀 116評論 0 0
  • 作家馮唐寫過一篇文章《如何避免成為一個油膩的中年猥瑣男》,有油膩的中年男相應(yīng)的就有油膩的中年婦女,網(wǎng)上有很多對油膩...
    b37c28fb876b閱讀 341評論 0 0

友情鏈接更多精彩內(nèi)容