leetcode第一刷_Candy

來源:互聯網
上載者:User

這道題我覺得題目說的不是很明白,應該再具體舉幾個列子說明一下的,讓我這英語渣渣的人理解偏了。。

題目的意思是,當rate比他旁邊的人大時,拿的糖一定要比他多,這並不代表一樣rate的人,拿到的糖要一樣多。我一開始以為同樣rate的人必須保證公平,思想太共產主義了。那樣我的想法是按rate排名,一層一層的更新。。這個題的解法就簡單多了,應該是最直接的打表。

先從左往右掃一遍,如果當前小朋友rate比左邊的大,那他拿的糖就要比他多一塊兒。然後再從右往左掃一遍,如果當前小朋友rate高,並且拿的糖卻少,就要更新他。最後把所有的糖加起來。我覺得這裡應該解釋一下,從左至右掃了所有的,為什麼還要從右往左再掃一遍呢?以為比較的主語對象不一樣,你不比我帥,你覺得沒問題,不代表我就能忍啊。那好,能不能同時比較呢?當然不能,我都沒上過街,怎麼知道我是不是比我的鄰居要帥,光跟你比能說明問題?

ac代碼如下,說一個實現的細節,都說了每人保證一塊兒了嘛(出題的肯定中國人),結果就不要從0開始累計了啊,直接msize,後發的就能從0開始算了,是吧:

class Solution {public:    int candy(vector<int> &ratings) {        int msize = ratings.size();        int c[msize], res = msize;        memset(c, 0, sizeof(c));        for(int i=1;i<msize;i++){            if(ratings[i]>ratings[i-1])                c[i] = c[i-1]+1;        }        for(int i=msize-2;i>=0;i--){            if(ratings[i]>ratings[i+1]&&(c[i]<=c[i+1]))                c[i] = c[i+1]+1;        }        for(int i=0;i<msize;i++){            res += c[i];        }        return res;    }};


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.