演算法學習(一)

2021-10-19 05:19:29 字數 2106 閱讀 2265

分配問題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...