算法学习一:移除k位元素,使剩下元素最小。

本文探讨了一种算法问题,即如何移除数组中的k位元素,以使得剩余元素组成的数尽可能小。通过对问题的分析和解决过程的阐述,读者可以深入理解算法思维和优化技巧。
摘要由CSDN通过智能技术生成
    /**
     * 给定一个以字符串表示的数字 num 和一个数字 k
     * 从 num 中移除 k 位数字
     * 使得剩下的数字最小。
     * 如果可以删除全部数字则剩下 0
     * <p>
     * 比对插入位置之前的所有数字,如果大于则删掉其中最大的,小于则换掉比他更大的全部
     *
     * @param num string字符串
     * @param k   int整型
     * @return string字符串
     */
    public String removeKnums(String num, int k) {

        //如果不删元素,则直接返回原数字。
        if (k == 0) {
            return num;
        }
        //如果数字长度等于要删除的数量则直接返回0
        if (num.length() == k) {
            return "0";
        }
        //已删除的元素数量
        int removeNum = 0;
        //退出循环的位置
        int index = 0;
        //用于存储合适元素的栈
        Stack<Character> stack = new Stack<>();

        for (int i = 0; i < num.length(); i++) {
            //得到待插入数字
            char waitedJug = num.charAt(i);
            //如果栈不为空 且 栈顶元素大于待插入元素 且 已移除元素小于k个 则弹出栈顶元素
            while (!stack.isEmpty() &&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值