V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
yujianwjj
V2EX  ›  LeetCode

leetcode 第 402 题,移除 K 位数字 的疑问

  •  
  •   yujianwjj · 2023-05-30 15:57:01 +08:00 · 1632 次点击
    这是一个创建于 541 天前的主题,其中的信息可能已经有所发展或是发生改变。

    这道题目的解法是 每次删除一个字符,使剩下的字符最小。然后执行 k 次。

    这道题目为什么贪心算法是最优解?怎么证明。

    4 条回复    2023-05-31 03:19:15 +08:00
    JasonLaw
        1
    JasonLaw  
       2023-05-30 16:24:14 +08:00
    题目链接: https://leetcode.com/problems/remove-k-digits/

    Greedy? 不应该是 Monotonic Stack 吗?

    你应该把你的 solution 发出来,这样子才能有正确性的证明,建议你 append 一下。
    JasonLaw
        2
    JasonLaw  
       2023-05-30 16:24:41 +08:00
    NeetCode 的讲解。

    cpstar
        3
    cpstar  
       2023-05-30 17:15:43 +08:00
    看视频理解了题目,但是不赞同在数字大小上做文章,相反,直接干枚举。
    我感觉,应该是,在 num ( m 长)中取 m-k 个数字,然后求最小?
    有啥问题?
    kayleh
        4
    kayleh  
       2023-05-31 03:19:15 +08:00 via Android
    1. 只能移除数字,数字的原本顺序无法改变,所以 1432219 移除 3 位的有效答案只能是 1219 ,而不是 1123 。所以只能顺序遍历构造答案。
    2. 组成最小数字的数位应该是递增的(单调栈)
    3. 优先从左到右构造数字(尽量让高位的数较小)对答案贡献越大(贪心)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   4129 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 10:14 · PVG 18:14 · LAX 02:14 · JFK 05:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.