zoukankan      html  css  js  c++  java
  • leetcode(402&&406) 贪心两则

    这两个代码都是完全自己独立想出来的,代码还挺简洁的...加油~mt

    leetcode 402

    给定一个以字符串表示的非负整数 num,移除这个数中的 k 位数字,使得剩下的数字最小。

    注意:

    num 的长度小于 10002 且 ≥ k。
    num 不会包含任何前导零。
    示例 1 :

    输入: num = "1432219", k = 3
    输出: "1219"
    解释: 移除掉三个数字 4, 3, 和 2 形成一个新的最小的数字 1219。
    示例 2 :

    输入: num = "10200", k = 1
    输出: "200"
    解释: 移掉首位的 1 剩下的数字为 200. 注意输出不能有任何前导零。
    示例 3 :

    输入: num = "10", k = 2
    输出: "0"
    解释: 从原数字移除所有的数字,剩余为空就是0。

    核心: 问题转换 --选取长度为len(nums)-k的子序列,是子序列字典序最小

     1 class Solution:
     2     def removeKdigits(self, num: str, k: int) -> str:
     3         ans = []
     4         lenth = len(num)-k
     5         for it in num:
     6             while k and ans and ans[-1]>it:
     7                 ans.pop()
     8                 k -= 1
     9             ans.append(it)
    10         ans = ans[:lenth]
    11         pos = 0
    12         while pos<len(ans) and ans[pos]=='0':
    13             pos+=1
    14         ans = ans[pos:]
    15         return "".join(ans) if len(ans) else '0'

    leetcode  406

    假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。

    注意:
    总人数少于1100人。

    示例

    输入:
    [[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]

    输出:
    [[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]

    class Solution:
        def reconstructQueue(self, people):
            people.sort(key=lambda x: (-x[0], x[1]))
            ans = []
            for it in people:
                ans.insert(it[1], it)
            return ans
  • 相关阅读:
    HDOJ 4259 Double Dealing
    第三课 MongoDB 数据更新
    百度语音识别API初探
    几种常见排序算法的java实现
    HDU 1051 Wooden Sticks 贪心题解
    离线安装Cloudera Manager5.3.4与CDH5.3.4
    Unix哲学
    如何在管理层变动中存活下来
    SWTError: No more handles [gtk_init_check() failed] running platform tests (on Linux)
    "xxadmin" user: No protocol specified 错误
  • 原文地址:https://www.cnblogs.com/xidian-mao/p/11420327.html
Copyright © 2011-2022 走看看