最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二)

 更新時(shí)間:2021年07月17日 15:08:17   作者:Grandyang  
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下

[LeetCode] 80. Remove Duplicates from Sorted Array II 有序數(shù)組中去除重復(fù)項(xiàng)之二

Given a sorted array nums, remove the duplicates in-place such that duplicates appeared at most twice and return the new length.

Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.

Example 1:

Given nums = [1,1,1,2,2,3],

Your function should return length =

5

, with the first five elements of

nums

being

1, 1, 2, 2

and 3 respectively.

It doesn't matter what you leave beyond the returned length.

Example 2:

Given nums = [0,0,1,1,1,1,2,3,3],

Your function should return length =

7

, with the first seven elements of

nums

being modified to 

0

, 0, 1, 1, 2, 3 and 3 respectively.

It doesn't matter what values are set beyond the returned length.

Clarification:

Confused why the returned value is an integer but your answer is an array?

Note that the input array is passed in by reference, which means modification to the input array will be known to the caller as well.

Internally you can think of this:

// nums is passed in by reference. (i.e., without making a copy)
int len = removeDuplicates(nums);

// any modification to nums in your function would be known by the caller.
// using the length returned by your function, it prints the first len elements.
for (int i = 0; i < len; i++) {
print(nums[i]);
}

這道題是之前那道 Remove Duplicates from Sorted Array 的拓展,這里允許最多重復(fù)的次數(shù)是兩次,那么可以用一個(gè)變量 cnt 來記錄還允許有幾次重復(fù),cnt 初始化為1,如果出現(xiàn)過一次重復(fù),則 cnt 遞減1,那么下次再出現(xiàn)重復(fù),快指針直接前進(jìn)一步,如果這時(shí)候不是重復(fù)的,則 cnt 恢復(fù)1,由于整個(gè)數(shù)組是有序的,所以一旦出現(xiàn)不重復(fù)的數(shù),則一定比這個(gè)數(shù)大,此數(shù)之后不會(huì)再有重復(fù)項(xiàng)。理清了上面的思路,則代碼很好寫了:

解法一:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int pre = 0, cur = 1, cnt = 1, n = nums.size();
        while (cur < n) {
            if (nums[pre] == nums[cur] && cnt == 0) ++cur;
            else {
                if (nums[pre] == nums[cur]) --cnt;
                else cnt = 1;
                nums[++pre] = nums[cur++];
            }
        }
        return nums.empty() ? 0 : pre + 1;
    }
};

這里其實(shí)也可以用類似于 Remove Duplicates from Sorted Array 中的解法三的模版,由于這里最多允許兩次重復(fù),那么當(dāng)前的數(shù)字 num 只要跟上上個(gè)覆蓋位置的數(shù)字 nusm[i-2] 比較,若 num 較大,則絕不會(huì)出現(xiàn)第三個(gè)重復(fù)數(shù)字(前提是數(shù)組是有序的),這樣的話根本不需要管 nums[i-1] 是否重復(fù),只要將重復(fù)個(gè)數(shù)控制在2個(gè)以內(nèi)就可以了,參見代碼如下:

解法二:

class Solution {
public:
    int removeDuplicates(vector<int>& nums) {
        int i = 0;
        for (int num : nums) {
            if (i < 2 || num > nums[i - 2]) {
                nums[i++] = num;
            }
        }
        return i;
    }
};

到此這篇關(guān)于C++實(shí)現(xiàn)LeetCode(80.有序數(shù)組中去除重復(fù)項(xiàng)之二)的文章就介紹到這了,更多相關(guān)C++實(shí)現(xiàn)有序數(shù)組中去除重復(fù)項(xiàng)之二內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言文件操作實(shí)現(xiàn)數(shù)據(jù)持久化(幫你快速了解文件操作函數(shù))

    C語言文件操作實(shí)現(xiàn)數(shù)據(jù)持久化(幫你快速了解文件操作函數(shù))

    持久數(shù)據(jù)其實(shí)就是將數(shù)據(jù)保存到數(shù)據(jù)庫,下面這篇文章主要給大家介紹了關(guān)于C語言文件操作實(shí)現(xiàn)數(shù)據(jù)持久化(幫你快速了解文件操作函數(shù))的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • 深入了解C語言字符函數(shù)和字符串函數(shù)

    深入了解C語言字符函數(shù)和字符串函數(shù)

    這篇文章主要給大家介紹了關(guān)于C語言字符/字符串的相關(guān)函數(shù),文中通過示例代碼總結(jié)的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用C語言具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • linux C++ 獲取文件絕對(duì)路徑的實(shí)例代碼

    linux C++ 獲取文件絕對(duì)路徑的實(shí)例代碼

    下面小編就為大家?guī)硪黄猯inux C++ 獲取文件絕對(duì)路徑的實(shí)例代碼。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-12-12
  • C語言SetConsoleCursorPosition函數(shù)使用方法

    C語言SetConsoleCursorPosition函數(shù)使用方法

    這篇文章介紹了C語言SetConsoleCursorPosition函數(shù)的使用方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-12-12
  • c語言詳解動(dòng)態(tài)內(nèi)存分配及常見錯(cuò)誤的解決

    c語言詳解動(dòng)態(tài)內(nèi)存分配及常見錯(cuò)誤的解決

    給數(shù)組分配多大的內(nèi)存空間?你是否和初學(xué)C時(shí)的我一樣,有過這樣的疑問。這一期就來聊一聊動(dòng)態(tài)內(nèi)存的分配,讀完這篇文章,你可能對(duì)內(nèi)存的分配有一個(gè)更好的理解
    2022-04-04
  • Qt中const?QString轉(zhuǎn)換?char?*可能的坑

    Qt中const?QString轉(zhuǎn)換?char?*可能的坑

    本文主要介紹了Qt中const?QString轉(zhuǎn)換?char?*可能的坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • C++中構(gòu)造函數(shù)詳解

    C++中構(gòu)造函數(shù)詳解

    大家好,本篇文章主要講的是C++中構(gòu)造函數(shù)詳解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-02-02
  • 詳解C++中賦值和輸入輸出語句的用法

    詳解C++中賦值和輸入輸出語句的用法

    這篇文章主要介紹了詳解C++中賦值和輸入輸出語句的用法,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09
  • C語言中g(shù)etchar()的返回類型為什么是int詳解

    C語言中g(shù)etchar()的返回類型為什么是int詳解

    這篇文章主要給大家介紹了關(guān)于C語言中g(shù)etchar()的返回類型為什么是int的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • C語言代碼實(shí)現(xiàn)井字棋游戲

    C語言代碼實(shí)現(xiàn)井字棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言代碼實(shí)現(xiàn)井字棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-08-08

最新評(píng)論

茌平县| 炎陵县| 浪卡子县| 辉县市| 蓬溪县| 苏尼特左旗| 黄骅市| 南昌市| 巢湖市| 漳州市| 绍兴市| 漳平市| 调兵山市| 方正县| 桃园市| 亚东县| 绥阳县| 兴业县| 太和县| 巨野县| 新营市| 利川市| 高密市| 保定市| 保靖县| 盐山县| 桂阳县| 新营市| 肥西县| 浑源县| 莱阳市| 额敏县| 蚌埠市| 绥江县| 齐齐哈尔市| 壶关县| 无为县| 揭西县| 托克逊县| 湖北省| 渭源县|