保證每次操作都是區域性最優的,並且最後得到的結果是全域性最優的。
455. 分發餅乾
題目描述:每個孩子都有乙個滿足度,每個餅乾都有乙個大小,只有餅乾的大小大於等於乙個孩子的滿足度,該孩子才會獲得滿足。求解最多可以獲得滿足的孩子數量。
示例:
輸入: [1,2,3], [1,1]
輸出: 1
解釋:
你有三個孩子和兩塊小餅乾,3個孩子的胃口值分別是:1,2,3。
雖然你有兩塊小餅乾,由於他們的尺寸都是1,你只能讓胃口值是1的孩子滿足。
所以你應該輸出1。
輸入: [1,2], [1,2,3]
輸出: 2
解釋:
你有兩個孩子和三塊小餅乾,2個孩子的胃口值分別是1,2。
你擁有的餅乾數量和尺寸都足以讓所有孩子滿足。
所以你應該輸出2.
解法:
貪心問題。優先滿足胃口小的小朋友的需求。
對 g 和 s 公升序排序
初始化兩個指標分別指向 g 和 s 初始位置
對比 g[i] 和 s[j]
g[i] <= s[j]:餅乾滿足胃口,孩子指標右移
g[i] > s[j]:無法滿足胃口
無論滿不滿足胃口,都要右移餅乾指標
最後返回的就是小孩的指標移動的次數
class solution:
def findcontentchildren(self, g: list[int], s: list[int]) -> int:
g, s = sorted(g), sorted(s)
p1, p2 = 0, 0
while p1 < len(g) and p2 < len(s):
if g[p1] <= s[p2]:
p1 += 1
p2 += 1
return p1
給定乙個區間的集合,找到需要移除區間的最小數量,使剩餘區間互不重疊。
示例:
輸入: [ [1,2], [2,3], [3,4], [1,3] ]
輸出: 1
解釋: 移除 [1,3] 後,剩下的區間沒有重疊。
輸入: [ [1,2], [1,2], [1,2] ]
輸出: 2
解釋: 你需要移除兩個 [1,2] 來使剩下的區間沒有重疊。
輸入: [ [1,2], [2,3] ]
輸出: 0
解釋: 你不需要移除任何區間,因為它們已經是無重疊的了。
解法:
按區間的結尾進行排序,每次選擇結尾最小,並且和前乙個區間不重疊的區間。
class solution:
def eraseoverlapintervals(self, intervals: list[list[int]]) -> int:
if not intervals:
return 0
intervals = sorted(intervals,key=lambda x:x[-1])
curr = 0
count = 1
for i in range(1, len(intervals)):
if intervals[curr][1] <= intervals[i][0]:
count += 1
curr = i
return len(intervals)-count
452. 用最少數量的箭引爆氣球 貪心演算法(leetcode)
1 分糖果 455 用最小的糖果大小滿足需求最小的孩子 class solution else return count 2 搖擺序列 376 遍歷一次,儲存乙個狀態,如果狀態為上公升,變為下降,則長度 1,下降變上公升 1 class solution def wigglemaxlength se...
LeetCode 貪心演算法
12.15 135.12.21 435.假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i,都有乙個胃口值 g i 這是能讓孩子們滿足胃口的餅乾的最小尺寸 並且每塊餅乾 j,都有乙個尺寸 s j 如果 s j g i 我們可以將這個餅乾 j 分配給孩...
leetcode 貪心演算法
貪心演算法中,是以自頂向下的方式使用最優子結構,貪心演算法會先做選擇,在當時看起來是最優的選擇,然後再求解乙個結果的子問題。貪心演算法是使所做的選擇看起來都是當前最佳的,期望通過所做的區域性最優選擇來產生乙個全域性最優解 如最小生成樹 dijkstra單源最短路徑 貪心選擇性質 所謂貪心選擇性質是指...