美文网首页
给定一个整形数组,去掉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位后剩余数字按序组成数字最小

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

  • 贪心算法删数问题

    删数问题 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n和k,设...

  • 算法-数组(三)

    最小的k个数 求子数组的最大和 把数组排成最小的数字 1.最小的k个数 问题描述:输入n个数字,找到数组中最小的k...

  • Leetcode.66.Plus One

    题目 给定一个整形数组, 每个元素都是单个数字, 对最后一个数字加1, 求新的数组 思路 简单的数组操作, 主要需...

  • 2019.4.10胡凡算法笔记

    1.N位数字与数组的转化 将N位数字的每一位存储在数组中 将数组中的数字组成N位数字 2.最大公约数和最小公倍数 ...

  • 栈-N402-移掉K位数字

    题目 概述:给定一个自然数字符串,要求从中移掉K个数,使得剩下的字符所组成的自然数最小 输入:自然数字符串,长度范...

  • 每日一题-1619. 删除某些元素后的数组均值

    题目: 给你一个整数数组 arr ,请你删除最小 5% 的数字和最大 5% 的数字后,剩余数字的平均值。 与 标准...

  • [剑指offer]08-旋转数组的最小数字

    旋转数组的最小数字 题目 给定一个递增的旋转数组A,返回旋转数组中的最小值。旋转数组:给定一个已排序的数组,假设为...

  • 每周一道leetcode—— 260. Single Numbe

    题目 给定一个数组,在这个数组中,包含了一些整形数字,除了有两个数字重复了一次,其他数字都重复了两次。找出这两个数...

  • 回文数组 搜狐2018秋招笔试题

    对于一个给定的正整数组成的数组 a[] ,如果将 a 倒序后数字的排列与 a 完全相同,我们称这个数组为“回文”的...

网友评论

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

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