老鼠串门 - 华为机试真题题解

考试平台: 时习知

分值: 100分

考试时间: 两小时(共3题)

alt

题目描述

现有一个狭小的老鼠洞,每次仅能一只老鼠进或者出(类似于栈的特性),如果通道里有多只老鼠,那么先进洞的老鼠会比晚进洞的老鼠出来更晚,假如有一窝老鼠来串门,我们给每只老鼠单独编个数字号码,1、2、3 ...

允许老鼠进洞后,又出洞,再次进洞,且若众多老鼠都挤满到洞口了,则不再会有老鼠进洞,最后出洞的顺序就按洞口到洞底的老鼠编号输出。

假如老鼠进洞的顺序是1、2、3,那么可能的出洞顺序是3、2、1,考虑到洞未满的情况下,老鼠进洞后又出洞了,也可能是1、2、3等,但不可能是3、1、2。

现给定一个进洞序列,序列里数字可能重复,重复表示出洞后再次进洞,假定序列最后洞是满的,序列长度小于10000。

即老鼠编号范围是[1,10000]。请给出老鼠出洞的顺序?

输入

输入一行数字数列,每个数字之间用英文空格分隔。如

1 2 3

输出

3 2 1

示例1

输入:
1 2 3 2 3 4 5

输出:
3 2 5 4 3 2 1

解释: 
123后又出现2,说明2号老鼠是之前已经出洞了,再重新进洞,2号老鼠要出洞,需要3号老鼠先出洞,因而最先出洞的是3号老鼠,接着是2号老鼠。2号重新进洞后,接着3号又进洞,再是4号和5号,5号后面没其它的说明洞口满了。那么出洞顺序 就是 3 2 5 4 3 2 1

示例2

输入:
1 1 2 3 4 4 5

输出:
1 4 5 4 3 2 1

解释: 
1后面又是1,说明1号老鼠进洞后又出洞了,接着又进洞,接着是2、3、4号老鼠进洞,接着又4号老鼠进洞,说明4号老鼠也是出洞了再进洞的,5号后面没其它的说明洞口满了。那么出洞顺序 就是 1 4 5 4 3 2 1

题解

该题目属于栈的应用,具有典型的“先进后出”特性,类似于栈的操作。题目要求模拟老鼠进洞出洞的顺序,因此需要通过栈来保存进洞的老鼠编号,当老鼠出洞时,依次从栈中取出并按顺序输出。

解题思路

  1. 栈的特点:栈是后进先出的数据结构,适合处理老鼠进洞的逻辑。每只老鼠进洞相当于入栈,老鼠出洞则相当于出栈。
  2. 检测是否重复进洞:当老鼠的编号再次出现时,说明它已经出洞,再次进洞前,洞中其他的老鼠要依次出洞。
  3. 顺序处理:每次读入一个老鼠编号时,检查它是否已经在洞里。如果是重复编号,则开始出洞操作,将编号放入结果序列,直到该老鼠重新进洞。
  4. 最后出洞顺序:当所有编号处理完后,洞里剩下的老鼠依次出洞,将其加入输出序列。

时间复杂度

  • 每个老鼠编号最多进洞和出洞一次,因此时间复杂度为 O(n),其中 n 是老鼠进洞序列的长度。

空间复杂度

  • 需要使用栈来存储当前在洞中的老鼠,最坏情况下栈的大小为 O(n)。

Java

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Scanner;

/**
 * @author code5bug
 */
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        String[] arr = in.

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

🔥笔试编程真题宝典💯 文章被收录于专栏

📕分享大厂机试真题深度剖析核心考点,助你速通面试。

全部评论

相关推荐

点赞 评论 收藏
分享
失踪人口回归了,大半年没有更新了,今天突发奇想,登陆了账号,更新一下最近的情况。🙋为啥10个多月没有更新od的日常了?1、之前更新的时候帖子浏览量太高了被小组里的人认出来了,后面不太好更新了;2、自己也懒,天天都那样,没啥可说的,难得更新…怕新进入的朋友不知道我什么情况,我大概简述一下:🤷‍♂️关于我:▫️99年,末流211计算机科学与技术专业,22届毕业生;▫22年7月毕业进入一家wlb的网安公司,23年3月被裁员;️▫️23年3月决定考研,由于心态和情感上的一些原因,无法全心投入,考研成绩340多分,分数线都没过,放弃调剂;▫️2024年2月底查到成绩后,放弃调剂,开始刷题耍面经准备找工作;▫️经过半个月的准备,只找到华为od这个相对薪资高点的工作,比毕业的时候高一点,gap了一年,接受了;▫️2023年3月底~今天,华为od软件开发。🧐问回答几个大家很关心的问题:一、华为od怎么样,能去吗,工资高吗?华为od,就是外包,内部称为“合作员工”,工号是300开头,正式员工是00开头,天天提醒自己是外包的身份。至于能不能去,如果你是应届生,千万别来,如果你是考研失败,有gap,其它工作找不到,欢迎来,这里不歧视考研的。如果你是社招想跳槽涨薪,那别来,od的薪资封顶也就那样,还不如去小公司混个管理啥的。二、od累吗?加班猛吗?这个问题,不好回答,因为与很多因素有关:1、看部门,有些部门就是很卷,比如2012、缅北云等等,这些部门卷出名了,看群里很多同事晚上11点过进展,吓人。我们部门还好,整体节奏没那么快,除了几个过点时间,其余基本上不怎么忙。2、看人,有些人就是喜欢卷,下班了不走,还有些人天天到点就走,堪比公务员,刚好我们组这两种人都有,有的人天天干到晚上10点过11点过的,还有的人,天天到点就下班。我的节奏就是,周一、二、四早9晚9,周三周五早9晚5.30,基本就这样,周末有急事就加班,没事就不去。三、od有机会转华为吗?概率大吗?打消这个念头🙅,去当od就不要想转华为,首先24年开始,转华为的通道基本关闭,人家校招生都不怎么招了(今年我们部门就招了一个校招),还给你一个od转自有?很多时候领导可能想给你转,但是提上去也审批不过,现在没有hc了,群里有哥们2年绩效4连A,985本,申报上去都被打下来了,说没有名额了,然后他马上要离职了。所以,还是有转成功的,但是转了也大概率抗指标被输出,下期再讲这个事情。四、od会毁简历吗?跳槽会被歧视吗?实话告诉你,会,我们组里几个od员工天天想着跑路(包括我),但是外面的工作一个找不到,他们都是计算机名校毕业的,还不能说明问题吗?当然,我看划水群里面还是有很多大佬跳槽去了更好的公司,工资也涨了一些,但是,大多数人的情况是,根本找不到工作!!!如果你技术很强,那么“外包”这个tag并不会阻碍你向上攀升。至于我为什么想跑路了,这篇写不下了,现在凌晨2点了,明天,哦,不对,是今天,哈哈,看有没有空再更新一篇吧。
投递华为技术有限公司等公司10个岗位
点赞 评论 收藏
分享
评论
4
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务