N 位数删除 K 个数字,使剩下的数字最小

本贴最后更新于 2181 天前,其中的信息可能已经沧海桑田

题目描述:
给定一个十进制的正整数 number,该正整数有 N 位,选择从里面去掉 K 个数字,希望留下来的数字组成的正整数最小。

输入描述:
输入为两个数字,第一个数字是一个正整数 number, 1<=length(number)<=50000。第二个数字是希望去掉的数字数量 cnt, 并且 1<=cnt<=length(number)。

输出描述:
输出保留下来的结果。

示例:

输入
124682385 2

输出
1242385

思路:
删除 K 个,可以使用贪心算法,每次删除 1 个。
那么每次删除哪一个呢?
如果 N>=2 的话,我们可以将该整数写成 XabY 的形式,其中 X 和 Y 分别是前缀和后缀,并且其长度可以为 0。因为 a 和 b 相邻并且 a 在 b 左边,所以删除一个的话,剩下的数就变成了 XaY 或 XbY 了。分下面两种情况讨论:
(1)若 a!=b 的话,为了使剩下的数最小,我们倾向于删除 a 和 b 中较大的那个数
(2)若 a==b 的话,删除 a 和删除 b 是等价的,所以我们就跳过 a,去比较 b 和它的后继,这就转变成了问题(1)了。

综上所述:
如果要使的剩下的数字最小,可以每次从左向右扫描,找出连续的非严格递增串,删除该串的最后一个数字。
如果要使剩下的数字最大,可以每次从左向右扫描,找出连续的非严格递减串,删除该串的最后一个数字。

下面给出求剩下数字最小的 C++ 代码:

string deleteKNumbers(string &str, int k) { string::iterator start; bool flag; for(int i = k; i > 0; --i) { flag = 0; for(start = str.begin(); start < str.end() - 1; ++start) { // 每次删除第一个比下一个数字大的数 if(*start > *(start + 1)) { str.erase(start); flag = 1; break; } } //如果所有数字递增,则删除最后几个数字直接返回 if(!flag) { str.erase(str.end() - i, str.end()); break; } } return str; }
  • 算法
    425 引用 • 254 回帖 • 24 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • visus 1 评论

    如有一个整数数组 n(里面的整数不一样,没有 0,个数位 m,其中 m 大于 3),求得到全部不重复的 3 位数字,求有多少个。

    读不明白这题目
    ellenbboe
  • visus

    要用代数解决

  • visus

    不能用实数

  • visus

    没有人给答案,我日

  • visus

    比如[1,3,2,4],那么结果就是 24 种组合,例如 123,,124,132,134.....

    1 回复
  • ellenbboe

    这不是概率论吗-.-

    1 回复
  • visus

    给答案就完事了

    1 回复
  • ellenbboe
  • visus

    不对呀,孩子,你概率论体育老师教的吗,还有题目的审题你确定好了嘛,一个两个问题,m 是知道的,但是是代数

  • visus

    一看你就没做过大赛的数学题

    1 回复
  • ellenbboe

    不是 m 个数里面取三个数进行排列吗

  • visus

    不是答案,你没写过这类程序

  • visus

    你写过就知道了,所以说写过和没有写过的都知道

请输入回帖内容 ...

推荐标签 标签

  • OneDrive
    2 引用
  • SendCloud

    SendCloud 由搜狐武汉研发中心孵化的项目,是致力于为开发者提供高质量的触发邮件服务的云端邮件发送平台,为开发者提供便利的 API 接口来调用服务,让邮件准确迅速到达用户收件箱并获得强大的追踪数据。

    2 引用 • 8 回帖 • 507 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1742 回帖 • 2 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖
  • SpaceVim

    SpaceVim 是一个社区驱动的模块化 vim/neovim 配置集合,以模块的方式组织管理插件以
    及相关配置,为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全,
    语法检查、格式化、调试、REPL 等特性。用户仅需载入相关语言的模块即可得到一个开箱
    即用的 Vim-IDE。

    3 引用 • 31 回帖 • 112 关注
  • Vim

    Vim 是类 UNIX 系统文本编辑器 Vi 的加强版本,加入了更多特性来帮助编辑源代码。Vim 的部分增强功能包括文件比较(vimdiff)、语法高亮、全面的帮助系统、本地脚本(Vimscript)和便于选择的可视化模式。

    29 引用 • 66 回帖
  • 创业

    你比 99% 的人都优秀么?

    81 引用 • 1395 回帖
  • CSDN

    CSDN (Chinese Software Developer Network) 创立于 1999 年,是中国的 IT 社区和服务平台,为中国的软件开发者和 IT 从业者提供知识传播、职业发展、软件开发等全生命周期服务,满足他们在职业发展中学习及共享知识和信息、建立职业发展社交圈、通过软件开发实现技术商业化等刚性需求。

    14 引用 • 155 回帖 • 1 关注
  • Git

    Git 是 Linux Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

    211 引用 • 358 回帖
  • HTML

    HTML5 是 HTML 下一个的主要修订版本,现在仍处于发展阶段。广义论及 HTML5 时,实际指的是包括 HTML、CSS 和 JavaScript 在内的一套技术组合。

    108 引用 • 295 回帖
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    694 引用 • 537 回帖 • 1 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 1 关注
  • 微软

    微软是一家美国跨国科技公司,也是世界 PC 软件开发的先导,由比尔·盖茨与保罗·艾伦创办于 1975 年,公司总部设立在华盛顿州的雷德蒙德(Redmond,邻近西雅图)。以研发、制造、授权和提供广泛的电脑软件服务业务为主。

    8 引用 • 44 回帖
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖 • 1 关注
  • HHKB

    HHKB 是富士通的 Happy Hacking 系列电容键盘。电容键盘即无接点静电电容式键盘(Capacitive Keyboard)。

    5 引用 • 74 回帖 • 522 关注
  • FlowUs

    FlowUs.息流 个人及团队的新一代生产力工具。

    让复杂的信息管理更轻松、自由、充满创意。

    1 引用
  • SEO

    发布对别人有帮助的原创内容是最好的 SEO 方式。

    36 引用 • 200 回帖 • 41 关注
  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 12 关注
  • 资讯

    资讯是用户因为及时地获得它并利用它而能够在相对短的时间内给自己带来价值的信息,资讯有时效性和地域性。

    56 引用 • 85 回帖
  • danl
    181 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖 • 1 关注
  • Bootstrap

    Bootstrap 是 Twitter 推出的一个用于前端开发的开源工具包。它由 Twitter 的设计师 Mark Otto 和 Jacob Thornton 合作开发,是一个 CSS / HTML 框架。

    18 引用 • 33 回帖 • 649 关注
  • 大数据

    大数据(big data)是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

    89 引用 • 113 回帖
  • 倾城之链
    23 引用 • 66 回帖 • 167 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    7 引用 • 28 回帖
  • 旅游

    希望你我能在旅途中找到人生的下一站。

    100 引用 • 905 回帖
  • Ruby

    Ruby 是一种开源的面向对象程序设计的服务器端脚本语言,在 20 世纪 90 年代中期由日本的松本行弘(まつもとゆきひろ/Yukihiro Matsumoto)设计并开发。在 Ruby 社区,松本也被称为马茨(Matz)。

    7 引用 • 31 回帖 • 269 关注