米哈游笔试 3.29
笔试前基本搜不到什么题,也不知道复习什么,直接考。考完看了别人发的帖子,好像所有技术岗考的内容都一样。鼠鼠投的是前端(人事系统)的暑期实习。
1. 单选题
内容包括C++,计网,操作系统(进程线程调度的问题),浏览器缓存(没考前端的内容,觉得确实是所有技术岗位统考)
2. 多选题
内容包括C++,计网,操作系统,数据结构
(C++是真的多,我是一点也不会,没学,直接凉了,操作系统的那些选择也好多不会)
3. 代码题
(1) 给一个数组,定义一个“区间”= [1, i],在这个“区间”的对应凸区间 = [min{a1,... ai}, max{a1, ... ai}] 中,找出不属于该凸区间的最小非负数。(理解题意就得看好一会,头次看想错了,重写花了点时间,我直接按求区间->遍历区间求凸区间->获得结果,这种暴力写法写,不出意外超时,觉得可以用动态规划写,但没想出来)
'''js
let arr = [1, 0, 4, 5, 1]
let result = []
let min = Number.MAX_VALUE, max = 0
for(let i = 0; i < arr.length; i++) {
// 维护最大值和最小值就好,别再去求区间,遍历
min = Math.min(min, arr[i])
max = Math.max(max, arr[i])
if(min > 0) {
result.push(0)
}else {
result.push(max+1)
}
}
console.log(result)
'''
(2) 给一个二进制序列,如:&amp;quot;001100&amp;quot;,然后把11往后移1位,...,最后形成一个方阵,如:
001100
000110
000011
100001
110000
011000
求这个方阵中,由0组成的最大矩形或三角形的面积(没思路直接过)
'''js
let s = '001110'
/**
* 别傻傻去生成矩阵,直接求连续的0,再从1累加得到面积,如果全0则直接求正方形面积
*
* 001110
* 000111
* 100011
* 110001
* 111000
* 011100
*/
let isSquare = true
for(const i of s) {
if(i !== '0') {
isSquare = false
break
}
}
if(isSquare) {
console.log(s.length * s.length)
}
let zeroNum = s[0] === '0' ? 1 : 0
let max = 0
let ss = s + s
for(let i = 1; i < ss.length; i++) {
if(ss[i] === '0' && ss[i - 1] === '1') zeroNum = 1
if(ss[i] === '0' && ss[i - 1] === '0') zeroNum++
max = Math.max(max, zeroNum)
}
console.log((1 + max) * max / 2)
'''
(3) 给一个数组,一个查询次数n,和n个输入的目标值,求这个数组中任意2个不同的数,他们的乘积等于对应的目标值,输出是n对下标(找不到[-1,-1])。(也是直接暴力解法,过了20%,可以再进行剪枝,但还是没过)考完才发现可以用两数之和哈希表的操作
'''js
let arr = [2,3,6,7,3,7,4]
let target = 6
let map = new Map()
let result = []
for (let i = 0; i < arr.length; i++) {
if(arr[i] > target) continue
if (map.has(target / arr[i])) {
result = [i, map.get(target / arr[i])]
}
map.set(arr[i], i)
}
console.log(result)
'''
总结:太难了,又是一轮游,下去再沉淀沉淀。之前看过米哈游秋招的笔试,好像是21年还是22年的,手写题都没这么难,都a出来的,现在tm是越来越难,也可能是一紧张脑子乱了(好了不说了,主要原因是自己菜)
再做了一遍,确实觉得没有考试那时感觉难,最后一题在想去重+根号n,去重的话,索引不会发生变化吗。(看看有无佬过了这一道)
#笔试##米哈游##暑期实习##前端##前端实习#
1. 单选题
内容包括C++,计网,操作系统(进程线程调度的问题),浏览器缓存(没考前端的内容,觉得确实是所有技术岗位统考)
2. 多选题
内容包括C++,计网,操作系统,数据结构
(C++是真的多,我是一点也不会,没学,直接凉了,操作系统的那些选择也好多不会)
3. 代码题
(1) 给一个数组,定义一个“区间”= [1, i],在这个“区间”的对应凸区间 = [min{a1,... ai}, max{a1, ... ai}] 中,找出不属于该凸区间的最小非负数。(理解题意就得看好一会,头次看想错了,重写花了点时间,我直接按求区间->遍历区间求凸区间->获得结果,这种暴力写法写,不出意外超时,觉得可以用动态规划写,但没想出来)
'''js
let arr = [1, 0, 4, 5, 1]
let result = []
let min = Number.MAX_VALUE, max = 0
for(let i = 0; i < arr.length; i++) {
// 维护最大值和最小值就好,别再去求区间,遍历
min = Math.min(min, arr[i])
max = Math.max(max, arr[i])
if(min > 0) {
result.push(0)
}else {
result.push(max+1)
}
}
console.log(result)
'''
(2) 给一个二进制序列,如:&amp;quot;001100&amp;quot;,然后把11往后移1位,...,最后形成一个方阵,如:
001100
000110
000011
100001
110000
011000
求这个方阵中,由0组成的最大矩形或三角形的面积(没思路直接过)
'''js
let s = '001110'
/**
* 别傻傻去生成矩阵,直接求连续的0,再从1累加得到面积,如果全0则直接求正方形面积
*
* 001110
* 000111
* 100011
* 110001
* 111000
* 011100
*/
let isSquare = true
for(const i of s) {
if(i !== '0') {
isSquare = false
break
}
}
if(isSquare) {
console.log(s.length * s.length)
}
let zeroNum = s[0] === '0' ? 1 : 0
let max = 0
let ss = s + s
for(let i = 1; i < ss.length; i++) {
if(ss[i] === '0' && ss[i - 1] === '1') zeroNum = 1
if(ss[i] === '0' && ss[i - 1] === '0') zeroNum++
max = Math.max(max, zeroNum)
}
console.log((1 + max) * max / 2)
'''
(3) 给一个数组,一个查询次数n,和n个输入的目标值,求这个数组中任意2个不同的数,他们的乘积等于对应的目标值,输出是n对下标(找不到[-1,-1])。(也是直接暴力解法,过了20%,可以再进行剪枝,但还是没过)考完才发现可以用两数之和哈希表的操作
'''js
let arr = [2,3,6,7,3,7,4]
let target = 6
let map = new Map()
let result = []
for (let i = 0; i < arr.length; i++) {
if(arr[i] > target) continue
if (map.has(target / arr[i])) {
result = [i, map.get(target / arr[i])]
}
map.set(arr[i], i)
}
console.log(result)
'''
总结:太难了,又是一轮游,下去再沉淀沉淀。之前看过米哈游秋招的笔试,好像是21年还是22年的,手写题都没这么难,都a出来的,现在tm是越来越难,也可能是一紧张脑子乱了(好了不说了,主要原因是自己菜)
再做了一遍,确实觉得没有考试那时感觉难,最后一题在想去重+根号n,去重的话,索引不会发生变化吗。(看看有无佬过了这一道)
#笔试##米哈游##暑期实习##前端##前端实习#
全部评论
算法比往年难好多
第一题,维护区间最小值和最大值就好。
第二题,考虑连续的0个数,然后按三角算,如果全是0,按矩形算
第三题,我排序,二分 20%
放心,我第三题就是哈希,也只是20%
第一题应该是min大于0就输出0,而不是min等于max
越想越气,我是真的傻杯

笔试真的一样吗
第二题考完才想到根据旋转直接算

太紧张了第一次笔试
相关推荐
03-29 16:05
南京大学 Java 点赞 评论 收藏
分享

点赞 评论 收藏
分享