leetcode - 904 水果成籃


在一排樹中藻雌,第 i 棵樹產(chǎn)生 tree[i] 型的水果雌续。
你可以從你選擇的任何樹開始,然后重復(fù)執(zhí)行以下步驟:

把這棵樹上的水果放進(jìn)你的籃子里胯杭。如果你做不到驯杜,就停下來。
移動(dòng)到當(dāng)前樹右側(cè)的下一棵樹做个。如果右邊沒有樹鸽心,就停下來。
請(qǐng)注意居暖,在選擇一顆樹后顽频,你沒有任何選擇:你必須執(zhí)行步驟 1,然后執(zhí)行步驟 2太闺,然后返回步驟 1糯景,然后執(zhí)行步驟 2,依此類推省骂,直至停止蟀淮。

你有兩個(gè)籃子,每個(gè)籃子可以攜帶任何數(shù)量的水果钞澳,但你希望每個(gè)籃子只攜帶一種類型的水果怠惶。
用這個(gè)程序你能收集的水果總量是多少?

示例 1:

輸入:[1,2,1]
輸出:3
解釋:我們可以收集 [1,2,1]略贮。
示例 2:

輸入:[0,1,2,2]
輸出:3
解釋:我們可以收集 [1,2,2].
如果我們從第一棵樹開始甚疟,我們將只能收集到 [0, 1]仗岖。
示例 3:

輸入:[1,2,3,2,2]
輸出:4
解釋:我們可以收集 [2,3,2,2].
如果我們從第一棵樹開始,我們將只能收集到 [1, 2]览妖。
示例 4:

輸入:[3,3,3,1,2,1,1,2,3,3,4]
輸出:5
解釋:我們可以收集 [1,2,1,1,2].
如果我們從第一棵樹或第八棵樹開始轧拄,我們將只能收集到 4 個(gè)水果。

解題思路

這題其實(shí)要求其實(shí)很簡(jiǎn)單讽膏,就是找出數(shù)組中長(zhǎng)度最大的連續(xù)由2種元素構(gòu)成的子數(shù)組檩电,返回這個(gè)子數(shù)組的長(zhǎng)度。但由于本題有時(shí)間限制府树,只是樸素的解法會(huì)出現(xiàn)超時(shí)的情況俐末,需要對(duì)實(shí)現(xiàn)進(jìn)行一定的優(yōu)化。

參考花花醬的hashtable+ sliding windows


花花醬解法
class Solution {
public:
// 樸素解法
    int totalFruit(vector<int>& tree) {
        int size = tree.size();
        int fruit[size] = {0};
        int max =0;
        
        for(int i = 0; i< size;i++){
            int number = 1;
            int type1 = -1;
            // 第一種水果
            type1 = tree[i];
            int type2 = -1;
            for(int j = i+1; j<size ;j++){
                // 第二種水果
                if(tree[j]!=tree[i]){
                    // type2 is null
                    if(type2 < 0){
                        type2 = tree[j];
                        number++;
                    }else{
                        // 出現(xiàn)第三種水果奄侠,跳出循環(huán)
                        if(tree[j] != type2){
                            break;
                        }else{
                            number++;
                        }
                    }
                    
                }else{
                    number++;
                }
            }
            fruit[i] = number;
            if(number> max)
                max = number;
        }
        return max;
    }
    
   
public:
// by [花花醬] (https://zxi.mytechroad.com/blog/hashtable/leetcode-904-fruit-into-baskets/)

  int totalFruit(vector<int>& tree) {        
    map<int, int> idx; // {fruit -> last_index}
    int ans = 0;
    int cur = 0;
    for (int i = 0; i < tree.size(); ++i) {
      int f = tree[i]; // 取一種水果
      if (!idx.count(f)) { // 返回值只有0或1
         // !idx.count(f) ==  1,即出現(xiàn)某種新水果時(shí)
        if (idx.size() == 2) { // 如果已經(jīng)有了兩種水果卓箫,再出現(xiàn)第三種水果的時(shí)候
          auto it1 = begin(idx); 
          auto it2 = next(it1);
          if (it1->second > it2->second) swap(it1, it2);
          // 找到之前兩種水果中,下標(biāo)最小的水果垄潮,開始新的窗口
          cur = i - it1->second - 1; // cur存新窗口的大小       
          idx.erase(it1); // 刪除下標(biāo)較小的水果
        }       
      }   
      // 添加新水果的下標(biāo)信息
      idx[f] = i;  
      // 比較新窗口和上一個(gè)窗口的大小
      ans = max(++cur, ans);
    }
    return ans;
  }

};
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烹卒,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弯洗,更是在濱河造成了極大的恐慌旅急,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牡整,死亡現(xiàn)場(chǎng)離奇詭異藐吮,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逃贝,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門谣辞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人秋泳,你說我怎么就攤上這事潦闲≡懿ぃ” “怎么了迫皱?”我有些...
    開封第一講書人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)辖众。 經(jīng)常有香客問我卓起,道長(zhǎng),這世上最難降的妖魔是什么凹炸? 我笑而不...
    開封第一講書人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任戏阅,我火速辦了婚禮,結(jié)果婚禮上啤它,老公的妹妹穿的比我還像新娘奕筐。我一直安慰自己舱痘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開白布离赫。 她就那樣靜靜地躺著芭逝,像睡著了一般。 火紅的嫁衣襯著肌膚如雪渊胸。 梳的紋絲不亂的頭發(fā)上旬盯,一...
    開封第一講書人閱讀 51,182評(píng)論 1 299
  • 那天,我揣著相機(jī)與錄音翎猛,去河邊找鬼胖翰。 笑死,一個(gè)胖子當(dāng)著我的面吹牛切厘,可吹牛的內(nèi)容都是我干的萨咳。 我是一名探鬼主播,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼疫稿,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼某弦!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起而克,我...
    開封第一講書人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤靶壮,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后员萍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腾降,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年碎绎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了螃壤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡筋帖,死狀恐怖奸晴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情日麸,我是刑警寧澤寄啼,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站代箭,受9級(jí)特大地震影響墩划,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗡综,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一乙帮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧极景,春花似錦察净、人聲如沸驾茴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽沟涨。三九已至,卻和暖如春异吻,著一層夾襖步出監(jiān)牢的瞬間裹赴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工诀浪, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棋返,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓雷猪,卻偏偏與公主長(zhǎng)得像睛竣,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子求摇,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理射沟,服務(wù)發(fā)現(xiàn),斷路器与境,智...
    卡卡羅2017閱讀 134,652評(píng)論 18 139
  • 項(xiàng)目團(tuán)建聚會(huì)時(shí)验夯,項(xiàng)目經(jīng)理可以和大家一起做的小游戲: 1、 猜數(shù)字 游戲規(guī)則: 猜數(shù)字(1~100)每猜一次范圍縮小...
    般若無相閱讀 1,493評(píng)論 0 0
  • 窮燈不窮 輝映不息 所有的開始與結(jié)局都已寫好 將斷章殘語行列交錯(cuò)編匯成孤本 你說 迷茫摔刁、孤獨(dú)挥转、晦澀難懂 我說 執(zhí)著...
    雁北南鴻閱讀 290評(píng)論 2 3
  • 文/耿先生 1. 不得不說,看到五班群聊精華整理的那一刻共屈,我被驚到了被嚇到了绑谣,更被深深的震撼了,而且拗引,我相信有這個(gè)...
    耿先生閱讀 706評(píng)論 34 44