標籤:leetcode 演算法 面試
【題目】
There are N children standing in a line. Each child is assigned a rating value.
You are giving candies to these children subjected to the following requirements:
- Each child must have at least one candy.
- Children with a higher rating get more candies than their neighbors.
What is the minimum candies you must give?
【題意】
有N個孩子排成一排,每個孩子有一個分值,按照下面的兩條規則給孩子分餅乾
1. 每個孩子至少有一塊餅乾
2. 分值高的孩子比他相鄰孩子拿的餅乾要多
問,最少給多少塊餅乾就可以了?
【思路】
不多給,也不少給,分值高的比相鄰的多拿一塊即可
首先給每個孩子發一塊餅乾
然後,每個孩子跟他左邊的孩子比,從左至右檢查每個孩子,如果這個孩子的分值比他左邊孩子的要高,我們再給他些餅乾,讓他比他左邊的孩子多一塊餅乾。
然後,每個孩子跟他右邊的孩子比,從右至左檢查每個孩子,如果這個孩子的分值比他右邊孩子的要高,而他的餅乾數沒右邊孩子的多,我們要給他些餅乾,讓他比他右邊的孩子多一塊餅乾。
【代碼】
class Solution {public: int candy(vector<int> &ratings) { int sum=0; int size=ratings.size(); vector<int> candy(size, 1); //從左至右檢查每個孩子的左鄰居 for(int i=1; i<size; i++){ if(ratings[i]>ratings[i-1]) candy[i]=candy[i-1]+1; } //從右至左檢查每個孩子的右鄰居 for(int i=size-2; i>=0; i--){ if(ratings[i]>ratings[i+1] && candy[i]<=candy[i+1]) candy[i]=candy[i+1]+1; } //計算餅乾數 for(int i=0; i<size; i++) sum+=candy[i]; return sum; }};