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

移除 K 位得到最小值

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

描述


有一行由正数组成的数字字符串,移除其中的 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;
}
}

相关文章

最长连续数列

最长连续数列

描述 输入一个乱序的连续数列,输出其中最长连续数列长度,要求算法复杂度为  O(n)  。 输入 54,55,300,12,56 输出 3 输入样例 100,4,...

sonarqube安装使用

sonarqube安装使用

必要条件 JDK8(Oracle JRE8 或者OpenJDK8) 硬件需求,非企业版的要求特别低,直接忽略了,企业版的需要8核CPU、16GBRAM。 支持的平台 JDK:Oracle...

Idea快捷键

Idea快捷键

Ctrl+Alt+左键/光标 进入方法对应的实现类 对应eclipse Ctrl + 左键Ctrl+Alt+b         &...

发表评论

访客

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