1. 程式人生 > 其它 >美的筆試--分糖果

美的筆試--分糖果

有N個小朋友站在一排,每個小朋友都有一個評分 你現在要按以下的規則給孩子們分糖果:
  • 每個小朋友至少要分得一顆糖果
  • 分數高的小朋友要他比旁邊得分低的小朋友分得的糖果多
你最少要分發多少顆糖果? 示例1

輸入

[1,2,2]

輸出

4

思路:

從左到右一次遍歷,從右到左一次遍歷,就ok了。

我的錯誤的思路:從左到右,看是升序還降序,然後話要考慮等於號,用了5個變數來記錄遍歷結果,很麻煩而且沒寫出來。

總結:多總結思路,常規思路往往是錯的;需要考慮很多細節的方法也往往是錯的。

class Solution {
public:
    int candy(vector<int> &ratings) {
        //題意:N個孩子站成一排,每個孩子分配一個分值。給這些孩子派發糖果,滿足如下要求:
        
//每個孩子至少一個 //分值更高的孩子比他的相鄰位的孩子獲得更多的糖果 //求至少分發多少糖果? int len=ratings.size(); if(len==1) return 1; int sum=0; vector<int> v(len,1);//初始將每個孩子的糖果數都設為1 //從左向右掃描,保證一個方向上分數更大的糖果更多 for(int i=1;i<len;i++){ if(ratings[i] > ratings[i-1
]) v[i]=v[i-1]+1; } //從右向左掃描,保證另一個方向上分數更大的糖果更多 for(int i=len-2;i>=0;i--){ if(ratings[i] > ratings[i+1] && v[i] <= v[i+1]) v[i]=v[i+1]+1; } for(int i=0;i<len;i++){ sum+=v[i]; }
return sum; } };
心之所願,永不相忘