摘要:今日題目老師想給孩子們分發(fā)糖果,有個孩子站成了一條直線,老師會根據(jù)每個孩子的表現(xiàn),預(yù)先給他們評分。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。示例輸入輸出解釋你可以分別給這三個孩子分發(fā)顆糖果。第三個孩子只得到顆糖果,這已滿足上述兩個條件。
今日題目
老師想給孩子們分發(fā)糖果,有N個孩子站成了一條直線,老師會根據(jù)每個孩子的表現(xiàn),預(yù)先給他們評分。
你需要按照以下要求,幫助老師給這些孩子分發(fā)糖果:
每個孩子至少分配到 1 個糖果。相鄰的孩子中,評分高的孩子必須獲得更多的糖果。那么這樣下來,老師至少需要準(zhǔn)備多少顆糖果呢?
示例 1:
輸入: [1,0,2]
輸出: 5
解釋: 你可以分別給這三個孩子分發(fā) 2、1、2 顆糖果。
示例 2:
輸入: [1,2,2]
輸出: 4
解釋: 你可以分別給這三個孩子分發(fā) 1、2、1 顆糖果。第三個孩子只得到 1 顆糖果,這已滿足上述兩個條件。
題目分析
對于這個問題,主要的條件是要相鄰孩子,得分高的拿的糖果要多(不包括相等得分),還有就是每個人最少都要有一個。
解決這個問題我們還是采用貪心算法,首先初始化每個人分配的糖果數(shù)量都是1,然后這個算法需要遍歷兩遍,第一遍從左往右遍歷,如果當(dāng)前孩子的分?jǐn)?shù)大于前一個孩子的分?jǐn)?shù),則當(dāng)前孩子得到的糖果在前一個孩子的基礎(chǔ)上加1;然后,第二遍從右往左遍歷,如果當(dāng)前孩子的分?jǐn)?shù)大于他右邊孩子的分?jǐn)?shù),并且他的糖果不比他右邊孩子多,則糖果數(shù)在他基礎(chǔ)上加1;最后,將所有孩子的糖果數(shù)相加即可。
第二次遍歷是為了處理數(shù)組中降序和有出現(xiàn)相鄰孩子分?jǐn)?shù)相同的情況。
代碼實(shí)現(xiàn)
class Solution:
def candy(self, ratings): """ :type ratings: List[int] :rtype: int """ num = [1]*len(ratings) for i in range(0,len(ratings)-1): if ratings[i+1] > ratings[i]: num[i+1] = num[i] + 1 for i in range(len(ratings)-1,0,-1): if ratings[i] < ratings[i-1]: num[i-1] = max(num[i]+1,num[i-1]) return sum(num)
寫在最后
寒假已經(jīng)跟一個小伙伴商量好一起刷題,感興趣的小伙伴也可以加入我們,希望大家每天可以交流刷題的心得,為了保證質(zhì)量我會控制人數(shù),大約在12人左右。
推薦閱讀:
Python騷操作 | 用Python來P圖
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/43021.html
摘要:寫在前面今天這篇文章是貪心算法系列的第三篇劃分字母區(qū)間。前文回顧貪心算法分發(fā)糖果刷題匯總匯總貼今日題目字符串由小寫字母組成。返回一個表示每個字符串片段的長度的列表。示例輸入輸出解釋劃分結(jié)果為。每個字母最多出現(xiàn)在一個片段中。 寫在前面 今天這篇文章是貪心算法系列的第三篇--劃分字母區(qū)間。 前文回顧: 【LeetCode】貪心算法--分發(fā)糖果(135) 刷題匯總: 【LeetCode】匯總...
摘要:題目要求假設(shè)有個孩子站成一排,每個孩子擁有一個評估值。我們可以觀察到,每次最遠(yuǎn)只需要額外分發(fā)到距離當(dāng)前最近的評分最高的那個孩子。因?yàn)樗奶枪麛?shù)量的增加并不會影響到之前孩子。當(dāng)有多個最近評分最高的孩子時,則選擇最后一個。 題目要求 There are N children standing in a line. Each child is assigned a rating value....
摘要:貪心法復(fù)雜度時間空間思路典型的貪心法,如果一個孩子比另一個孩子的分高,我們只多給塊糖。我們可以先從左往右遍歷,確保每個孩子根他左邊的孩子相比,如果分高,則糖要多個,如果分比左邊低,就只給一顆。 Candy There are N children standing in a line. Each child is assigned a rating value. You are gi...
摘要:貪心算法每一步必須滿足一下條件可行的即它必須滿足問題的約束。四題目分析貪心算法,總是做出在當(dāng)前看來是最好的選擇,不從整體最優(yōu)上加以考慮,也就是說,只關(guān)心當(dāng)前最優(yōu)解,按照貪心策略,不關(guān)心以后,我們只關(guān)心當(dāng)前利益。 一、寫在前面 為什么要在LeetCode刷題?大家都知道不管是校招還是社招算法題是必考題,而這一部分恰巧是大多數(shù)人的短板,所以刷題首先是為了提高自身的編程能力,能夠在算法面試中...
摘要:原問題我的沙雕解法無重復(fù)字母存在重復(fù)字母挨打最暴力的無腦解法,耗時。。。 原問題 Given a string, find the length of the?longest substring?without repeating characters. Example 1: Input: abcabcbb Output: 3 Explanation: The answer is a...
閱讀 1342·2021-11-15 11:37
閱讀 2220·2021-09-23 11:21
閱讀 1307·2019-08-30 15:55
閱讀 2113·2019-08-30 15:55
閱讀 2822·2019-08-30 15:52
閱讀 2827·2019-08-30 11:12
閱讀 1582·2019-08-29 18:45
閱讀 1895·2019-08-29 14:04