找最小数 - 华为OD统一考试(E卷)

2024华为OD机试(E卷+D卷+C卷)最新题库【超值优惠】Java/Python/C++合集

华为od机试

题目描述

给一个正整数NUM1,计算出新正整数NUM2,NUM2为NUM1中移除N位数字后的结果需要使得NUM2的值最小。

输入描述

  1. 输入的第一行为一个字符串,字符串由0-9字符组成,记录正整数NUM1,NUM1长度小于32。
  2. 输入的第二行为需要移除的数字的个数,小于NUM1长度。

输出描述

输出一个数字字符串,记录最小值NUM2。

示例1

输入:
2615371
4

输出:
131

说明:

示例2

输入:

输出:

说明:

题解

问题分析

这道题可以归类为贪心算法。目标是在尽量靠左的地方删除比后面大的数字,使得剩下的数字更小。删除操作中优先考虑移除高位的数字,尽量保持低位数字小。

解题的基本思路:

  1. 使用一个栈来存储字符。
  2. 从左到右遍历数字字符串,如果当前数字比栈顶的数字小且还可以删除数字,就弹出栈顶数字。
  3. 遍历完成后,如果删除的数字还不够,则继续从后向前删除栈顶数字。
  4. 最后,将栈中剩下的数字拼接成结果,并移除前导零。

时间复杂度

  • 时间复杂度为O(n),因为每个数字最多进出栈一次。
  • 空间复杂度为O(n),用于存储栈中的数字。

Java

import java.util.Scanner;
import java.util.Stack;
/**
 * @author code5bug
 */
public class Main {
    public static String removeDigits(String num, int k) {
        Stack<Character> stack = new Stack<>();
        
        for (char digit : num.toCharArray()) {
            while (!stack.isEmpty() && k > 0 && stack.peek() > digit) {
                stack.pop();
                k--;
            }
            stack.push(digit);
        }
        
        // 如果 k 还大于 0,继续从栈顶删除
        while (k > 0) {
            stack.pop();
            k--;
        }
        
        // 构建结果
        StringBuilder result = new StringBuilder();
        for (char digit : stack) {
            if (!(result.length() == 0 &&

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

华为OD机试题库题解2024 文章被收录于专栏

华为OD机考(CDE卷)题库(绝对都是原题),帮助你上岸华为(已经不少小伙伴成功上岸)。提供Java、Python、C++ 三种语言的解法。每篇文章都有详细的解题步骤、代码注释详细及相关知识点的练习题。有问题,随时解答。

全部评论
示例2数据是空白的。
点赞 回复 分享
发布于 2024-10-17 13:53 四川

相关推荐

01-10 19:41
山东大学 C++
投递华为等公司10个岗位
点赞 评论 收藏
分享
2024-12-24 15:50
华北理工大学 Java
&nbsp;&nbsp;&nbsp;&nbsp;个人背景:机试253,双非一本&nbsp;&nbsp;&nbsp;&nbsp;时间线:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2024年4月22日,机试(滑动窗口100,进制转换100,动态规划跳格子53)&nbsp;hr告诉我必须发邮件当天答完,所以加完班晚上十点多答的,脑袋昏昏沉沉答完,然后hr就消失了&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2024年10月5日,性格测试(正上班,忽然有od&nbsp;hr联系我说有没有空面试,恰好不忙就答应了)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2024年11月25日,资面(hr的常问问题,稳定性,加班看法,期望薪资等)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2024年11月28日,技术一面(回溯&nbsp;手撕全排列,十分钟写出后面试结束)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2024年11月30日,技术二面(动态规划&nbsp;手撕最大子数组的和&nbsp;十分钟解出,面试官升级问题难度“要求打印出有最大和的那个最大子数字组”,只写出了暴力解,让我继续优化,此时连八股再手撕已经超90分钟,心力交瘁,没有写出最优解,遂二面挂)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2024年12月28日,技术三面(贪心&nbsp;加油站问题&nbsp;三十分钟解出暴力解)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;和我沟通的HR说全部部门卡C,这是什么说法?&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;流程到此已经没有推进了,HR和我说大概率是没有机会入职了,但是可以重新机试,再来一轮面试流程(excuse&nbsp;me?&nbsp;wtf?&nbsp;为啥面试都通过了还能给我挂了呢)#华为od##od##面试等了一周没回复,还有戏吗##社招##双非本科的出路是什么?##ai智能作图#
点赞 评论 收藏
分享
评论
2
2
分享

创作者周榜

更多
牛客网
牛客企业服务