博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
获取删除k个数后的最小值
阅读量:4135 次
发布时间:2019-05-25

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

思路:把原整数的所有数字从左向右比较,如果发现某一位数字大于它右边的数字,那么在删除该数字后,必定回使该数位的的值降低

以遍历数为外循环,以k作为内循环,使用栈的特性,让所有数字一个个入栈,当某个数字需要删除时,让数字出栈,最后,把栈的内容转化为字符串结果

/** * 删除调整数的k个值后,或得删除后的最小值 * 思路:把原整数的所有数字从左向右比较,如果发现某一位数字大于它右边的数字,那么在删除该数字后,必定回使该数位的的值降低 *   以遍历数为外循环,以k作为内循环,使用栈的特性,让所有数字一个个入栈,当某个数字需要删除时,让数字出栈,最后,把栈的内容转化为字符串结果 * 时间复杂度:只对所有数字遍历了一次,遍历的时间复杂度是O(n),把栈转化为字符串的时间复杂度也是O(n),所以整个时间复杂度是O(n) * 空间复杂度:程序中利用栈来回溯遍历的数字和删除数字,所以程序的空间复杂度是O(n) */public class RemoveKDigists {    public static String getRemoveKDigists(String numbers,int k){        //新整数的最终长度 = 原整数长度 - 看;        int newLength = numbers.length() - k;        //创建一个栈用于接收所有的数字        char[] stack =new char [numbers.length()];        int top = 0;        for (int i=0;i
0 && stack[top - 1]>c&& k >0){ top --; k--; } stack[top++] = c; } //找到栈中第一个非零数字的位置,以此构建新的整数字符串 int offSet = 0; while (offSet < newLength && stack[offSet] == '0'){ offSet ++; } return offSet ==newLength ?"0":new String(stack,offSet,newLength - offSet); } public static void main(String[] args) { System.out.println(getRemoveKDigists("1593212",3)); System.out.println(getRemoveKDigists("30200",1)); System.out.println(getRemoveKDigists("10",2)); System.out.println(getRemoveKDigists("541270936",3)); }}

 

转载地址:http://lqsvi.baihongyu.com/

你可能感兴趣的文章
PHP中的stdClass 【转】
查看>>
XHProf-php轻量级的性能分析工具
查看>>
OpenCV gpu模块样例注释:video_reader.cpp
查看>>
就在昨天,全球 42 亿 IPv4 地址宣告耗尽!
查看>>
Mysql复制表以及复制数据库
查看>>
Linux分区方案
查看>>
如何使用 systemd 中的定时器
查看>>
git命令速查表
查看>>
linux进程监控和自动重启的简单实现
查看>>
OpenFeign学习(三):OpenFeign配置生成代理对象
查看>>
OpenFeign学习(四):OpenFeign的方法同步请求执行
查看>>
OpenFeign学习(六):OpenFign进行表单提交参数或传输文件
查看>>
Ribbon 学习(二):Spring Cloud Ribbon 加载配置原理
查看>>
Ribbon 学习(三):RestTemplate 请求负载流程解析
查看>>
深入理解HashMap
查看>>
XML生成(一):DOM生成XML
查看>>
XML生成(三):JDOM生成
查看>>
Ubuntu Could not open lock file /var/lib/dpkg/lock - open (13:Permission denied)
查看>>
collect2: ld returned 1 exit status
查看>>
C#入门
查看>>