難度:Hard
描述:有 n 個孩子站成一行。每個孩子都被分配了一個整數陣列 ratings 中給定的評分值。
你要按照以下要求給這些孩子發糖果:
每個孩子至少得到一顆糖果。
評分較高的孩子會比他們的鄰居得到更多的糖果。
返回你需要準備的最少數量的糖果,以便將糖果分發給孩子們。
方法:
思路:
1.每位先發放一顆糖果。
2.左至右比對,與左方一位鄰居評分小於則保證至少大於左方一位鄰居一顆糖果。
3.右至左比對,與右方一位鄰居評分小於則保證至少大於右方一位鄰居一顆糖果。
4.合計所有糖果數量。
Runtime : 15 ms (74.70%)
Memory : 17.78 MB (47.60%)
class Solution {
public:
int candy(vector<int>& ratings) {
int ans = 0;
int n = ratings.size();
// Step 1.
vector<int> candys(n,1);
// Step 2.
for(int i=1;i<n;++i){
if(ratings.at(i-1)<ratings.at(i)){
candys[i] = max(candys[i-1]+1, candys[i]);
}
}
// Step 3.
for(int i=n-2;i>=0;--i){
if( ratings.at(i) > ratings.at(i+1) ){
candys[i] = max(candys[i+1]+1, candys[i]);
}
}
// Step 4.
for(int i=0;i<n;++i){
ans+=candys.at(i);
}
return ans;
}
};
沒有留言:
張貼留言