2020.0319美团笔试-前端(node.js)+讨论求解

😢感觉赛马🐴网的 OJ 对前端js太不友好了吧,5道题4道超时,js在OJ上本来速度就不如其他语言。

🧐淦!突然发现了赛🐴网的OJ注意事项:Web编程题:javascript不支持ES6及以上。不支持ES6,哦那没事了😁。

😊推荐大家去看一下leetcode300最长上升子序列-今晚两道题和 LIS有关。


一、扎银花-签到题(秒A)

AC-100%

数组从大到小排序,取前三之和,比较大小😃

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
rl.on('line', line=>{
    if(!line) return
    inArr.push(line.trim())
    if(inArr.length === 3){
        let n = +inArr[0]
        let arr1 = inArr[1].split(' ').map(e=>+e)
        let arr2 = inArr[2].split(' ').map(e=>+e)
        let max1 = getMax(arr1)
        let max2 = getMax(arr2)
        let max = (max1 == max2) ? max1: Math.max(max1, max2)
        console.log(max)
    }
})

function getMax(arr) {
    let res = arr.sort((a,b)=>b-a)
    let max = res[0]+res[1]+res[2]
    return max
}

二、最长上升子序列-删除一个数

超时-18%

dp/贪心 + 二分查找,写了两种,试了两种,杠了至少半个小时🥺

两种都超时,时间复杂度dp是O(n^2),贪心 + 二分查找是O(nlogn)

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
rl.on('line', line=>{
    if(!line) return
    inArr.push(line.trim())
    if(inArr.length === 2){
        let n = +inArr[0]
        let arr = inArr[1].split(' ').map(e=>+e)
        let tmp = []
        let res = []
        for (let i = 0; i < n; i++) {
            tmp = [...arr].del(i)
            res.push(lengthOfLIS(tmp))
        }
        let max = Math.max(...res)
        console.log(max)
    }
})

var lengthOfLIS = function(nums) {
    const len = nums.length
    if (len == 0) return 0
    if (len == 1) return 1
    let dp = new Array(len).fill(1)
    for (let i = 1; i < len; i++) {
        for (let j = 0; j < i; j++) {
            dp[i] = Math.max(dp[i], nums[i] > nums[j] ? dp[j] + 1 : 1)
        }
    }
    return Math.max(...dp)
};

Array.prototype.del=function(n) { 
    if(n<0) return this
    else return this.slice(0,n).concat(this.slice(n+1,this.length))
}

三、任务-dp

超时-18%

本来感觉比较简单能拿分的,最后十分钟才开始做,没做完😂

四、跑步-bfs

超时-18%

自闭了😶

五、最长上升子序列-翻转查询

超时-64%

这道题感觉思路,算法都没问题。用贪心 + 二分查找比dp的ac率还低。😶

const readline = require('readline')
const rl = readline.createInterface({
    input: process.stdin,
    ouput: process.stdout
})
let inArr = []
let n
rl.on('line',line=>{
    if(!line) return
    inArr.push(line.trim())
    n = inArr[0].split(' ').map(e=>+e)[1]
    if(inArr.length === n+2){  
        let arr = inArr[1].split('').map(e=>+e) 
        let qc = []
        for (let i = 0; i < n; i++) {
            qc[i] = inArr[i+2].split(' ')
            if(qc[i][0]=='c'){
                let [c,a,b]=qc[i]
                for (let i = a-1; i < b; i++) {
                    if(arr[i]==0){
                        arr[i]=1
                    }else {
                        arr[i]=0 
                    }
                }
            }
            if(qc[i][0]=='q'){
                console.log(lengthOfLIS(arr))
            }
        }
    }
})

var lengthOfLIS = function(nums) {
    const len = nums.length
    if (len == 0) return 0
    if (len == 1) return 1
    let dp = new Array(len).fill(1)
    for (let i = 1; i < len; i++) {
        for (let j = 0; j < i; j++) {
            dp[i] = Math.max(dp[i], nums[i] >= nums[j] ? dp[j] + 1 : 1)
        }
    }
    return Math.max(...dp)
};

总结

今晚的题总体难度比上一次的低,但我还是太菜了😢理想是4A,现实只有2A。

希望能进面试了吧🤦‍♂️

在OJ上,赛🐴网不行❌,牛客网可以✅。

有大佬讲解一下3、4的思路吗?

#美团笔试##笔试题目##前端##美团#
全部评论
js写真的是灾难,用cpp好很多,js的输入输出有点不方便。
1 回复 分享
发布于 2020-03-26 14:42
第三题 两次遍历 第一次每次任务都拿最小的 第二次每个任务走一遍 然后取两次遍历的最大值 过了91
点赞 回复 分享
发布于 2020-03-19 22:48
膜拜大佬。。
点赞 回复 分享
发布于 2020-03-20 00:43
膜大佬
点赞 回复 分享
发布于 2020-03-20 01:24
同前端,吓得我都用cpp写了
点赞 回复 分享
发布于 2020-03-20 03:16
请问一下,美团前后端实习笔试题一样吗?
点赞 回复 分享
发布于 2020-03-24 15:54
刚收到美团笔试通知,说编程题可以用本地调试,那想请问一下除了本地调试还能用浏览器吗。。。比如查点相关函数模板啥的?
点赞 回复 分享
发布于 2020-03-24 22:09
用js写的话要自己写输入输出么?
点赞 回复 分享
发布于 2020-03-26 08:24

相关推荐

5 23 评论
分享
牛客网
牛客企业服务