美的筆試--分糖果
阿新 • • 發佈:2021-09-22
有N個小朋友站在一排,每個小朋友都有一個評分
你現在要按以下的規則給孩子們分糖果:
- 每個小朋友至少要分得一顆糖果
- 分數高的小朋友要他比旁邊得分低的小朋友分得的糖果多
輸入
[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; } };