美文网首页
给定一个整形数组,去掉k位后剩余数字按序组成数字最小

给定一个整形数组,去掉k位后剩余数字按序组成数字最小

作者: Rannver | 来源:发表于2018-09-19 14:19 被阅读0次

    题目:给定一个整形数组,去掉k位后剩余数字按序组成数字最小
    例如:3,1,2去掉1位,则有可能的结果是
    去掉3,剩余12
    去掉1,剩余32
    去掉2,剩余31
    结果最小数字是12

    去掉k位之后的数字是最小的,首先要保证去掉k位之后的首位,是去掉k位之后所有结果里最小的。那么可以理解为,每次去掉1位之后,所组成的数字是所有结果里最小的,循环k次。可以用栈实现这一操作,每次遍历数组里的元素,如果有在此之间比它大的就出栈,直到栈为空或者已抽完k位。

    代码如下:(Java语言实现)

    private static int Calculate(int[] a,int k){
    
        Stack<Integer> stack = new Stack<>();
        boolean isZeroK = false;
    
        for (int i = 0;i<a.length;i++){
            if (stack.isEmpty()||isZeroK){
               //如果stack为空或者已经抽取完k位数字,直接入栈
                stack.push(a[i]);
            }else {
                //栈非空且在a[i]之前有比a[i]大的数字时,出栈
                while( !stack.isEmpty() && k>0 && stack.peek()>a[i]){
                    stack.pop();
                    k--;
                }
    
                if (k==0){
                    isZeroK = true;
                }
                stack.push(a[i]);
            }
    
        }
       
        //用栈内剩余数字组合成一个整数
        int count = 0;
        int result = 0;
        while(!stack.isEmpty()){
            if (count==0){
                result += stack.pop();
            }else {
                int i = 10;
                int temp = count;
                while (temp-1>0){
                    i = i*10;
                    temp--;
                }
                result += stack.pop()*i;
            }
            count++;
        }
    
        return result;
    
    }
    

    相关文章

      网友评论

          本文标题:给定一个整形数组,去掉k位后剩余数字按序组成数字最小

          本文链接:https://www.haomeiwen.com/subject/nucinftx.html