当前位置:首页 > 未命名 > 正文内容

移除 K 位得到最小值

淙嶙6年前 (2020-07-22)未命名1549

描述


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

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


输入


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


输出


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


输入样例

1432219,3
10200,1

输出样例

1219
200


private static String solution(String line) {
    // 在此处理单行数据
    // 在此处理单行数据
String  a[] = line.split(",");
String str = a[0];
int count = Integer.parseInt(a[1]);
Node n = new Node(str.charAt(0)-48);
int arr[] = new int[str.length()-1];
for (int i = 1; i < str.length() ; i++){
char c = str.charAt(i);
arr[i-1] = (c - 48);
}
n.addNode(arr, 0);
Node root = n.deleteNode(count);
   // 返回处理后的结果
   return root==null?"0":root.nodeToStr();
}
static class Node {
Node left;
Node right;
Node parent;
int data;
public Node(int data){
this.data = data;
}
public Node addNode(int[] a, int index){
Node p = this;
Node n = new Node(a[index]);
n.parent = p;
if (p.data > a[index]){
p.left = n;
if(++index < a.length){
p.left.addNode(a, index);
}
}else{
p.right = n;
if(++index < a.length){
p.right.addNode(a, index++);
}
}
return n;
}
public String nodeToStr(){
StringBuilder sb = new StringBuilder();
Node n = this;
while(n != null){
sb.append(n.data);
if(n.left!=null){
n = n.left;
}else{
n = n.right;
}
}
return sb.toString();
}
public Node deleteNode(int count){
Node p = this;
Node root = this;
while(count > 0 && p !=null){
if(p.right != null){
p = p.right;
continue;
}else{
 if(p.left != null){
 if(p.parent != null){
 if(p.parent.data > p.left.data){
 p.left.parent = p.parent;
 p.parent.left = p.left;
 p = p.parent;
 p.right = null;
 }else{
 p.left.parent = p.parent;
 p.parent.right = p.left;
 p = p.left;
 }
 }else{
 p = p.left;
 while(p != null && p.data == 0){
 if(p.right != null){
 p = p.right ;
 }else{
 p = p.left;
 }
}
root = p;
if(p != null){
p.parent = null;
}
 }
 count--;
}else{
break;
}
}
}
return root;
}
}

相关文章

找出可能的合的组合

找出可能的合的组合

描述 给出一组不重复的正整数,从这组数中找出所有可能的组合使其加合等于一个目标正整数 N,如:一组数为 1, 2, 3,目标数为 4,那么可能的加合组合为:1, 1, 1, 11, 1, 21,...

HashMap的源码解读(一)

HashMap的源码解读(一)

/*  * 版权(C)1997, 2010,Oracle和/或其附属公司版权所有。  * Oracle专有/机密。使用须遵守许可条款。  *...

分库分表需要考虑的问题及方案

分库分表需要考虑的问题及方案

为什么要分库分表?解决单一数据库的性能问题。(通过分摊的思想解决独抗性能问题,分而治之)不管说是一个数据库还是说一台服务器,(CPU,磁盘,内存,IO)性能终究又上限,而使用中或预计使用中又达到了这个...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。