移除 K 位得到最小值

编程入门 行业动态 更新时间:2024-10-10 01:25:42

<a href=https://www.elefans.com/category/jswz/34/1767470.html style=移除 K 位得到最小值"/>

移除 K 位得到最小值

描述

 

有一行由正数组成的数字字符串,移除其中的 K 个数,使剩下的数字是所有可能中最小的。

假设:
 字符串的长度一定大于等于 K
 字符串不会以 0 开头

输入

一行由正整数组成的数字字符串,和一个正整数 K,两个数据由英文逗号隔开,如:1432219,3。

输出

 

移除 K 位后可能的最小的数字字符串。
如 1432219 移除 4, 3, 2 这 3 个数字后得到 1219,为所有可能中的最小值。

 

输入样例:

1432219,3
10200,1

输出样例

1219
200

思路:根据题目设需要删除的数字M,长度为LEN, 删除的位数为N, 用index表示当前删除的数字个数

如果第 i 位比 i+1 大,则需要删除第i位;(此处我因为用的数组,所以删除用的比较笨的办法,就是将i后面所有的数字像前移动以为,最后一位用空格处理);同时需要将i重新开始,index++;

如果第i位小于等于(i+1)此时我们需要判断:(i+N)与LEN的关系,如果相等, 此时我们需要将i 之后的数字向前移动一位,并且将i复位到第一个位置,同时index++。否则i++;

代码:

private static String solution(String line) {String[] strs = line.split(",");String strcount = strs[1].trim();int count = Integer.valueOf(strcount);char[] charArr = strs[0].toCharArray();long len = strs[0].length();if (len == count) {return 0 + "";}int index = 0;int i = 1;while (index < count && i < len) {if (charArr[i - 1] <= charArr[i]) {if (i + count == len) {for (;i < len - index; i++) {if(i == len - index - 1){charArr[i] = ' ';}else {charArr[i] = charArr[i + 1];}}index++;i=1;} else {i++;}} else {for(int j=i-1; j<len-index; j++){if(j == len - index - 1){charArr[j] = ' ';}else{charArr[j] = charArr[j + 1];}}index++;i = 1;}}String resut = String.valueOf(charArr).trim();return Long.valueOf(resut.isEmpty() ? "0" : resut) + "";
}

代码还有很多可以优化的,写得不好,请留言一起改进!

更多推荐

移除 K 位得到最小值

本文发布于:2024-03-04 14:11:33,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1709480.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:移除   最小值

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!