2021米哈游3.27笔试(个人见解)

1.前言

本人没参加米哈游3.27日笔试,当天正好是公务员省考,回到家已是晚上9点钟,完美错过了时间。群里有人讨论米哈游题目,自己也略有思考。

2.题目

照搬牛客网上的题目

2.1第一道 找最长子字符串

输入一个字符串s 找出最长的子字符串满足1807的顺序(但不能是1087或其他顺序 其中 1 8 0 7 可以重复)

比如 1180080108707 最长的就是118000007或者118000077 也就是长度为9 所以输出9

(1)思路

创建数组a[4],a[k]表示k数结尾的长度,其中a[0]存储以1结尾的长度,a[1]存储以8为结尾的长度,其余两位同理。

当遍历到b[j]时,用个switch进行判断,如果b[j]==1或8,0,7则对应的a[k]++,并与a[k-1]+1进行比较,取大数。

如果不等于,则不动。

(2)模拟

下面是有关情况的模拟:
在这里插入图片描述

(3)分析

时间复杂度为O(n),空间复杂度为O(1)。

2.2第二道 小明去游乐园

游乐场有n个项目
每个项目必须在时间ti前才能玩 玩一个项目需要花一个小时 小明0点进入游乐场
每个项目有对应的积分 玩了能获得积分 没玩要扣除相应的积分
求最多能获得多少分
比如
3
3 1 1
3 6 9
3个项目
分别在3点前 1点前 1点前参加 分别的积分是 3 6 9
算上游玩要花的一个小时 其实是要在 2点 0点 0 点 之前去玩
所以样例最多积分是 9+3-6=6分

(1)思路

该问题类似背包问题,显然最佳策略是尽量的得分,这样扣分也会相对应得减少,总分也会略高。准备一个数组来记录玩的项目的分数,该数组可以存储当前分数的最小值。根据时间进行从低到高的排序,接着进行循环遍历,时间是背包的容量,如果遍历到某个项目比数组中的最小值大,则进行替代。

2.3第三道 由序列化先序遍历求中序遍历

给一个由先序遍历序列化的二叉树(字符串) 求出它的中序遍历(数字)
比如 A
B C
D E
输入“A(B(D,),C(,E))”
输出 DBACE

(1)思路

常规题

(2)参考代码

博客

2.4 第四题 奇偶数和相等

输入两个数字作为左右区间 求区间内 奇数位的和 和 偶数位的和 相等的数字的个数
例如 9-130 有 11 22 33 44 55 66 77 88 99 110 121 等11个 输出11
比如 1221这种就是奇数位和偶数位和相等的数字

(1)思路

数学法
必要性:满足奇数偶数和相等的必为11倍数。
假设一个四位数abcd,然后a+c=b+d,1000a+10c+100b+d=1001a+11c+99b-a-c+b+d=1001a+11c+99b=11(91a+c+9b),n位数同理,因为都可以把它单独列出归0。

充分性:11x M,M满足临近两个数和小于10,即可满足奇数偶数和相等

例如81 x 11满足条件,82 x 11不满足条件

因此,假设一个[a,b]的范围求奇数偶数和相等个数,先进行除11处理,[a/11,b/11],得到[M,N]。

这个问题就变成简单的dp问题,设置dp[N][10],dp[i][k]表示i位数,以k开头的临近数字不超过10的个数。

dp[j][k]=累加dp[j-1][w],其中w满足w+k<10,使用循环实现。(后面想了下边界还是要进行个判断,比如121 x 11,那么判断121的时候dp[3][0]+边界判断的一个数,边界判断就是考虑三位数,首位为1的情况。)

然后根据M,N分别求出对应的dp,然后进行相减。

(2)分析

算法时间复杂度算一下,假设范围为[a,b],则除以11得到[M,N],那么要计算logM,logN位数,底数为10,除以11可以近似看成10吧,则位数c=loga-1,d=logb-1。dp运算需要计算10(c+d)。

大致算了下时间复杂度和空间复杂度均为O(10(loga+logb-2)),近似可以看成O(10log(ab/100))。(大佬们这么算对吗?)

优化的话就是考虑存在重复数据的,复杂度应该会更低。

2.5第五题 判断凸多边形

给一系列平面坐标 把他们按输入顺序首尾相连 判断是不是一个凸多边形
tip: 对于边AB BC 如果C在边的同一侧 则这个点满足凸多边形

(1)思路

题目给的不是很明确,应该是就是判断向量内积和吧?

另外,看到有些人说是有关图的问题,那道题我的思路先bfs遍历一遍求出一点能到达的所有点的集合,然后根据这个集合对另外一种边进行处理,再根据处理过的边再进行bfs,就是两条边都能到达点的集合。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此人受打击,决定去力扣历练

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值