Hard
Related Topics: Array / Greedy
LeetCode Source
首先先確認 len(ratings)
,如果小於等於 1,則直接回傳 len(ratings)
再來先初始化 candies = [1] * len(ratings)
,以符合條件一
Each child must have at least one candy.
之後演算法計算條件二
Children with a higher rating get more candies than their neighbors.
先從左項目開始判斷,如果 ratings[i] > ratings[i-1]
,則 candies[i-1]+1
再來判斷右項目,如果 ratings[i] > ratings[i+1]
,則比較兩種可能性
candies[i]
candies[i + 1] + 1
class Solution:
def candy(self, ratings: List[int]) -> int:
if len(ratings) <= 1:
return len(ratings)
candies = [1] * len(ratings)
for i in range(1, len(ratings)):
if ratings[i] > ratings[i - 1]:
candies[i] = candies[i - 1] + 1
for i in range(len(ratings) - 2, -1, -1):
if ratings[i] > ratings[i + 1]:
candies[i] = max(candies[i], candies[i + 1] + 1)
return sum(candies)
class Solution {
public:
int candy(vector<int>& ratings) {
if (ratings.size() <= 1)
return ratings.size();
vector<int> res(ratings.size(), 1);
for (int i = 1; i < ratings.size(); i++) {
if (ratings[i] > ratings[i-1])
res[i] = res[i-1] + 1;
}
for (int i = ratings.size()-2; i >= 0; i--) {
if (ratings[i] > ratings[i+1])
res[i] = max(res[i], res[i+1]+1);
}
return accumulate(res.begin(), res.end(), 0);
}
};
accumulate(res.begin(), res.end(), 0);
可以把 res
的值加總,初始值是 0