1荷鼠、題目
分發(fā)糖果 - 力扣(LeetCode) https://leetcode-cn.com/problems/candy/submissions/
2珊蟀、題解
本來(lái)我看到這個(gè)題目是困難独郎,心想,涼涼。尼瑪吸耿,又要不知道挖多久了。結(jié)果看了題目之后憎茂,我一度懷疑這個(gè)題目的難度定錯(cuò)了珍语,這題很簡(jiǎn)單。
題意是說(shuō)老師分糖竖幔,最少一塊板乙,相鄰比較,分高者多
解決方法就是首先拿一個(gè)數(shù)組來(lái)記錄每個(gè)位置的發(fā)糖數(shù)量拳氢,初始為每人一塊募逞。
然后進(jìn)行兩次遍歷,先進(jìn)行從前向后的遍歷馋评,如果后面的分?jǐn)?shù)比前面大放接,就在前面得到的糖果的基礎(chǔ)上加1;再進(jìn)行從后向前的遍歷留特,如果前面的分?jǐn)?shù)大于后面且前面分到的糖果少于后面纠脾,就在后面得到的糖果的基礎(chǔ)上加1;
最后蜕青,對(duì)糖果數(shù)組進(jìn)行累加即可苟蹈。
3、代碼
//兩次遍歷大法
class Solution {
public int candy(int[] ratings) {
int length = ratings.length;
int[] saveValueAry = new int[length];
//填充值
for (int i = 0; i < length; i++) {
saveValueAry[i]=1;
}
//從前到后
for (int i = 1; i < length; i++) {
if(ratings[i]>ratings[i-1]){
saveValueAry[i]=1+saveValueAry[i-1];
}
}
//從后到前
for (int i = length-2; i>=0; i--) {
if(ratings[i]>ratings[i+1]&&saveValueAry[i]<=saveValueAry[i+1]){
saveValueAry[i]=saveValueAry[i+1]+1;
}
}
//累加
int Sum=0;
for (int i = 0; i < length; i++) {
Sum+=saveValueAry[i];
}
return Sum;
}
}
4右核、執(zhí)行結(jié)果
image.png