分配問題2
貪心演算法:採用貪心策略,保證每次操作都是區域性最優,從而使得之後結果得到的結果是全域性最優的;也適用於全域性結果是區域性結果的簡單之和
解決:區間問題;分配問題。
leetcode 455 分發餅乾
假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。
對每個孩子 i,都有乙個胃口值 g[i],這是能讓孩子們滿足胃口的餅乾的最小尺寸;並且每塊餅乾 j,都有乙個尺寸 s[j] 。如果 s[j] >= g[i],我們可以將這個餅乾 j 分配給孩子 i ,這個孩子會得到滿足。你的目標是盡可能滿足越多數量的孩子,並輸出這個最大數值。
示例1:
輸入: g =[1
,2,3
], s =[1
,1]輸出:
1解釋:
你有三個孩子和兩塊小餅乾,3個孩子的胃口值分別是:1,2
,3。雖然你有兩塊小餅乾,由於他們的尺寸都是1,你只能讓胃口值是1的孩子滿足。所以你應該輸出1。
優先滿足飢餓度最小的孩子,即給剩餘孩子中最小飢餓度的孩子分配最小且能飽腹的餅乾。
步驟:排序
分配選擇
class
solution
: def findcontentchildren
(self, g: list[int]
, s: list[int])-
> int:
g =sort
(g) s =
sort
(s) children,cookie =0,
0while children <
len(g) and cookie <
len(s)
:if g[children]
<= s[cookie]
: children +=
1 cookie +=
1return children
leetcode 135 分發糖果
老師想給孩子們分發糖果,有 n 個孩子站成了一條直線,老師會根據每個孩子的表現,預先給他們評分。
你需要按照以下要求,幫助老師給這些孩子分發糖果:
每個孩子至少分配到 1 個糖果。
評分更高的孩子必須比他兩側的鄰位孩子獲得更多的糖果。
那麼這樣下來,老師至少需要準備多少顆糖果呢?
示例 1:
輸入:[1,
0,2]
輸出:5
解釋:你可以分別給這三個孩子分發 2、1、2 顆糖果。
存在比較關係的貪心策略,採取兩次遍歷,每次遍歷只考慮並更新相鄰一側的大小關係
步驟:初始化
從左往右遍歷
從右往左遍歷
求和統計
class
solution
: def candy
(self, ratings: list[int])-
> int:
a =for i in
range
(len
(ratings)
):#初始化
a.(1
)for i in
range
(len
(ratings)
): #從左往右遍歷
if i+
1<
len(ratings) and ratings[i]
< ratings[i+1]
: a[i+1]
=a[i]+1
for i in
range
(len
(ratings)-1
,0,-
1): #從右往左遍歷
if i-
1>=
0 and ratings[i]
< ratings[i-
1] and a[i-1]
<=a[i]
: a[i-1]
=a[i]+1
return
sum(a)#求和
演算法學習(一)
說明 給定一組陣列,進行排序,得到最大值和最小值。1 input data 2 1 3 5 7 9 11 295 297 299 300 298 296 12 10 8 6 4 234 answer 5 300 1 利用插入排序演算法進行排序 1 array 27871,16173,31511,13...
演算法學習之路(一)
目錄 題目一題目二 給定乙個整數陣列nums和乙個目標值target,請你在該陣列中找出和為目標值的那兩個整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums...
LM演算法學習(一)
原始資料 x origin 1,1.5,2.3,3.1,5.3,6.2,7 y origin 3.03,2.36,1.58,1.06,0.35,0.23,0.15 k max 150 最大迭代次數 e 1,0 0,1 單位矩陣 v 0.001 阻尼係數 a 0 0.01 初始迭代係數 b 0 0.0...