leetcode 贪心_LeetCode-贪心算法

贪心算法

保证每次操作都是局部最优的,并且最后得到的结果是全局最优的。

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

435. 无重叠区间

给定一个区间的集合,找到需要移除区间的最小数量,使剩余区间互不重叠。

示例:

输入: [ [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. 用最少数量的箭引爆气球

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值