米哈游8.15前端笔试 算法题+代码

卷面介绍

笔试题型是:10个选择题、3个算法编程题、1个前端编程题(一共100分钟)
选择题知识点包括有 c基础、html、css、js、http状态码,不能脱离笔试页面。
算法题编程语言限定 Typescript,但是js的语法都能用,可以用IDE。
前端题需要你直接手撸一个选择器,参考ElementUI的创建条目输入选择器版,当然功能和这个还是有很大不同。不能用IDE。

前言

js基础不是很好,思路都是按c语言来的。有啥可以改进的地方,请指大佬在评论区指出就行。

第一题

题干

判断字符串是否是回文串,只识别数字和字母(不区分大小写)。

输入样例

'a.bc1 21cb,A'

输出样例

true

分析

1、识别回文串
2、只识别数字和字母
3、不区分大小写

实现代码

// c语言中 大写字母+32==小写字母
// 但是js中无法这样做或者说我不会 单字符与ascii码 的相互转化
// 因为不会大小写转化手撸了一个映射表
const cList={
    'a': 'A',
    'b': 'B',
    'c': 'C',
    'd': 'D',
    'e': 'E',
    'f': 'F',
    'g': 'G',
    'h': 'H',
    'i': 'I',
    'j': 'J',
    'k': 'K',
    'l': 'I',
    'm': 'M',
    'n': 'N',
    'o': 'O',
    'p': 'P',
    'q': 'Q',
    'r': 'R',
    's': 'S',
    't': 'T',
    'u': 'U',
    'v': 'V',
    'w': 'W',
    'x': 'X',
    'y': 'Y',
    'z': 'Z',
    'A': 'A',
    'B': 'B',
    'C': 'C',
    'D': 'D',
    'E': 'E',
    'F': 'F',
    'G': 'G',
    'H': 'H',
    'I': 'I',
    'J': 'J',
    'K': 'K',
    'L': 'I',
    'M': 'M',
    'N': 'N',
    'O': 'O',
    'P': 'P',
    'Q': 'Q',
    'R': 'R',
    'S': 'S',
    'T': 'T',
    'U': 'U',
    'V': 'V',
    'W': 'W',
    'X': 'X',
    'Y': 'Y',
    'Z': 'Z',
}

function verify(param){
    // write code here
    let str=param.match(/[0-9a-zA-Z]+/g).join('')// 正则提取字符和数字再拼接
    let l=str.length
    for(let i=0;i<l/2;i++){
        // 先做大小写判断
        if(cList[str[i]] == cList[str[l-i-1]] && cList[str[l-i-1]]!=undefined){
            ;
        }
        // 在识别数字
        else if(str[i] == str[l-i-1]){
            ;
        }
        // 遇到无法匹配项则返回false
        else{
            return false
        }
    }
    return true
}

第二题

题干

有三个数字数组,求每个数组中的最大值,并将这三个值降序排列作为一个数组返回。

输入样例

[12, 23, 45], [374, 356, 10, 889], [156, 34]

输出样例

[889, 156, 45]

分析

1、先求三个数组的最大值
2、降序排列三个最大值

// 这里图省事和时间就全用sort排序了,为了效率求最大值可以遍历求
function max(a, b, c){
    let func = function(a, b){
        return b-a
    }
    a.sort(func)
    b.sort(func)
    c.sort(func)
    return [a[0], b[0], c[0]].sort(func)
}

第三题

题干

有一个只包含数字的字符串(length<=12),对其进行3次分割,求其所有可以划分为IP地址的可能,并返回其划分ip地址的数组。

输入样例

'25525511135'

输出样例

['255.255.11.135', '255.255.111.35']

分析

1、先做分割
2、判断分割是否是有效ip

// 发现对每个样例最多只要做3*3*3=27次分割就行了,所以直接暴力
// 本来想用正则 [0-255] 来识别的,但是忘记[]的范围只能0~99之间
// 所以只能自己写个判断
function getIp(str)
{
    let time = 0
    let list = []
    let l = str.length
    // 直接暴力分割
    for(let i=1;i<4;i++)
    {
        for(let j=i+1;j<i+4;j++)
        {
            for(let k=j+1;k<j+4;k++)
            {
                let a=str.slice(0, i)
                let b=str.slice(i, j)
                let c=str.slice(j, k)
                let d=str.slice(k, l)
                if(check(a) && check(b) && check(c) && check(d))
                list.push(a+'.'+b+'.'+c+'.'+d) 
            }
        }
    }
    return list
}
// 判断是否是0~255之间的字符串
function check(s){
    let n = parseInt(s)
    if(n+'' != s){// 排除前导0的情况
        return false
    }
    if(n>=0 && n<=255){
        return true
    }
    return false
}

反思

  第一次笔试,不知道题型和编程语言。所以结果就过了大概7个选择题+2个算法题。肯定是没戏了。做完三个算法题就把时间花完了,没分配时间写前端题了。

  最近准备考研了,所以确实心思不在这边了;又因为自学所以基础不牢,很多方法都不会用,比如大小写转化的toUpperCase()和toLowerCase()。考的题基本在LeeCode都有原题只能怪自己花的时间少了。

  提醒后面来笔试的前端同学好好刷力扣和牛客的题,还是很有用的。

#米哈游笔试##米哈游##笔经#
全部评论
需要米哈游内推可以私我
1 回复
分享
发布于 2021-08-24 14:23
点 `第${i}题`可跳到力扣上的原题
点赞 回复
分享
发布于 2021-08-17 00:11
滴滴
校招火热招聘中
官网直投
楼主请问你现在面试了吗?
点赞 回复
分享
发布于 2021-09-01 06:16
有没有米哈游前端消息的,跟你一天笔试现在还是HR初筛阶段
点赞 回复
分享
发布于 2021-09-03 08:07
9.12的前端笔试,算法题和这完全不是一个等级的,麻完了
点赞 回复
分享
发布于 2021-09-12 22:46
楼主想问一下,前端算法题可以用Java或者python实现吗,还是有语言限制的呀?
点赞 回复
分享
发布于 2021-09-13 09:12

相关推荐

9 34 评论
分享
牛客网
牛客企业服务