博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【nowcoder-2017校招真题】保留最大的数
阅读量:7210 次
发布时间:2019-06-29

本文共 1551 字,大约阅读时间需要 5 分钟。

hot3.png

题目描述

给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。

输入描述:

输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。

输出描述:

输出保留下来的结果。

示例1

输入

325 1

输出

35

题解

方法1. 因为想要最后剩下的数尽量大,所以贪心地从前往后找到某位数比后一位小就删掉这个数,但是这样需要 O(n*m) (n 是总位数,m 是删除的个数)。我们可以利用一个栈来达到 O(n)的时间复杂度:遍历每一位,当还能删除时且栈内的数比当前数小就出栈,直到栈内的数比当前数大,或者栈空,就将当前的数入栈。如果全部数都入过栈时还需要删除,那就从栈顶删。

sta = []#num = '0123456789's = input()n = m = int(input())for i in s:    #while len(sta) != 0 and num.index(sta[-1]) < num.index(i) and m > 0:    while len(sta) != 0 and sta[-1] < i and m > 0:        m -= 1        sta.pop()    sta.append(i)    print (''.join(sta[:(len(s) - n)]))

方法2.

贪心的从头开始往后面查找前一个数比后一个数小的相邻两数,删除前面的数,当所有这种情况都删除,数字数量cnt还不为0,从后面删除剩余cnt个数的数。

(如果选择删除全部0,再删除全部1,再删除全部2的方法,这种贪心策略是错误的。例如:3450  1,正确结果应该为450)

#include
using namespace std;const int maxn = 50005;char s[maxn];int stk[maxn]; int main(){ int cnt,top = -1; scanf("%s %d",s,&cnt); int len = strlen(s); for (int i = 0;i < len - 1;i++){ if (s[i] >= s[i + 1] || !cnt){ stk[++top] = s[i] - '0'; }else if (cnt && s[i] < s[i + 1]){ cnt--; while (cnt && top >= 0 && stk[top] < s[i + 1] - '0'){ top--; cnt--; } } } stk[++top] = s[len - 1] - '0'; while (cnt){ cnt--; top--; } for (int i = 0;i <= top;i++){ printf("%d",stk[i]); } printf("\n"); return 0;}//https://www.cnblogs.com/zzy19961112/p/8525873.html

 

转载于:https://my.oschina.net/u/553266/blog/1801549

你可能感兴趣的文章
析构函数(C# 编程指南)
查看>>
Unix Study之--AIX安装和配置SSH
查看>>
Silverlight粉丝们 让微软听到我们的声音
查看>>
领悟rrdtool
查看>>
perl_常用的函数
查看>>
转:iPhone之后,思考下一个科技突破(之二)
查看>>
如何将Ant下Web项目迁移到Hudson实现持续化集成开发
查看>>
根据XML配置规则导入Excel数据(三)准备验证工具类
查看>>
Python基础教程---读书笔记七
查看>>
Server Core 的部署与管理
查看>>
闲谈简单设计(KISS)疑惑
查看>>
●Misbehaving servers(服务器停止运转)
查看>>
在网页中嵌入任意格式的视频文件
查看>>
AIX更改逻辑卷属性的两种方法(smit和命令行)
查看>>
一统服务器桌面:安全狗新增杀毒功能
查看>>
有关extdelete恢复测试
查看>>
oracle init.ora常用配置详解
查看>>
App界面交互设计规范(转)
查看>>
IDEA9+Tomcat热部署配置
查看>>
FAQ系列 | ibdata1系统表空间文件都包含什么内容
查看>>