zoukankan      html  css  js  c++  java
  • LeetCode-贪心算法

    贪心算法

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

    455. 分发饼干

    455. 分发饼干

    题目描述:每个孩子都有一个满足度,每个饼干都有一个大小,只有饼干的大小大于等于一个孩子的满足度,该孩子才会获得满足。求解最多可以获得满足的孩子数量。

    示例

    输入: [1,2,3], [1,1]
    输出: 1
    解释: 
    你有三个孩子和两块小饼干,3个孩子的胃口值分别是:1,2,3。
    虽然你有两块小饼干,由于他们的尺寸都是1,你只能让胃口值是1的孩子满足。
    所以你应该输出1。
    
    输入: [1,2], [1,2,3]
    输出: 2
    解释: 
    你有两个孩子和三块小饼干,2个孩子的胃口值分别是1,2。
    你拥有的饼干数量和尺寸都足以让所有孩子满足。
    所以你应该输出2.
    

    解法

    贪心问题。优先满足胃口小的小朋友的需求。

    1. 对 g 和 s 升序排序

    2. 初始化两个指针分别指向 g 和 s 初始位置

    3. 对比 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. 无重叠区间

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

    452. 用最少数量的箭引爆气球

  • 相关阅读:
    (双指针 二分) leetcode 167. Two Sum II
    (双指针) leetcode 485. Max Consecutive Ones
    (双指针) leetcode 27. Remove Element
    (String) leetcode 67. Add Binary
    (数组) leetcode 66. Plus One
    (N叉树 BFS) leetcode429. N-ary Tree Level Order Traversal
    (N叉树 递归) leetcode 590. N-ary Tree Postorder Traversal
    (N叉树 递归) leetcode589. N-ary Tree Preorder Traversal
    (N叉树 DFS 递归 BFS) leetcode 559. Maximum Depth of N-ary Tree
    (BST 递归) leetcode98. Validate Binary Search Tree
  • 原文地址:https://www.cnblogs.com/LittlePanger/p/12626360.html
Copyright © 2011-2022 走看看