9.14 米哈游前端笔试

一题没a。。。今天真的不怎么怎么回事了,笔试完心态崩了。

  1. 快乐值,给一个数组,随意摆放数组内元素位置,如果相邻元素的平均值是非整数,则快乐值+1 问怎么摆快乐值最大
    输入:[112,111,114,116] 输出:[112,111,114,116] 共有2快乐值 <112,111> <111,114>
    思路:统计奇数跟偶数,判断哪个比较少,把少的插入到大的直接,再返回总的数组。(还是不知道哪里错了,答案说可以输出任意答案的。 脑子坏了 要输出字符串带空格,愣是没看见)(代码已修正)

    var findFun = function (nums) { 
     // 统计偶数跟奇数
     let odd = [] // ji
     let even = [] // ou
     let res = []
     for(let i=0;i<nums.length;i++){
         if(nums[i]%2==0){
             // 偶数
             even.push(nums[i])
         }else{
             odd.push(nums[i])
         }
     }
     let minNum = odd.length<even.length?true:false // false是奇数个数多
     if(minNum){
         // 奇数少
         while(odd.length>0){
             res.push(even.shift())
             res.push(odd.shift())
         }
         res = res.concat(even)
     }else{
         while(even.length>0){
             res.push(odd.shift())
             res.push(even.shift())
         }
    
         res = res.concat(odd)
     }
     return res.join(" ")
    }
  2. 最长连续子串。给一个字符串,找出里面包含k个'mihoyo'字符串的最短字符串
    输入:"mihoyoyomihoyomimihoyo",2 输出:0 13或者8 22
    我的思路:暴力解直接开撕,结果只过了41%

    var subMihoyo = function (strs,k) { 
     let res = []
     // 处理这个子串
     function isMihoyo(substrs,knum){
         // 遍历
         let path = 0
         for(let i=0;i<substrs.length-5;i++){
             if(substrs[i]=='m'&&substrs[i+1]=='i'&&substrs[i+2]=='h'&&substrs[i+3]=='o'&&substrs[i+4]=='y'&&substrs[i+5]=='o'){
                 path+=1
                 i+=5
             }
         }
         if(path==knum){
             return true
         }
         return false
     }
     let i,j
     let n=0
     for(i=0;i<=strs.length-k*6;i++){
         j=k*6+i
         while(j<strs.length){
             // i应该什么时候移动?
             let substr = Array.from(strs).slice(i,j)
             if(isMihoyo(substr,k)){
                 res.push([i,j-1])
                 break
             }
             j++
         }
     }
     if(res.length>0){
         res.sort((a,b)=>(a[1]-a[0])-(b[1]-b[0]))
         return res[0].join(" ")
     }else{
         return -1
     }
    }
  3. 递增序列,给一个数组,让里面元素严格增加。每次操作可以让第i个元素*2(翻倍)。最少需要多少次操作
    输入:[1,2,2,2] 输出:3
    思路:照样暴力,从序号1的元素开始翻倍呗。 果然超时了 16%

    var uptoSum = function(nums){
     // nums = [2,3,2,3,2]
     // 从第一个往后
     let res = 0
     for(let i=1;i<nums.length;i++){
         let pre = 0 
         if(nums[i]>nums[i-1]){
             continue
         }else{
             // 当前数字小于前面的数
             let temp = nums[i-1]
             let path = 0
             while(nums[i]<=temp){
                 temp=temp/2
                 path++
             }
             nums[i] = nums[i]*(2**path)
             res+=path
         }
     }
     return res
    }

    到这里做完,心态小崩,有点不想去思考其他思路了 T^T

#米哈游##米哈游笔试##米哈游校招##米哈游23秋招笔试心得体会#
全部评论
第三题
2 回复 分享
发布于 2022-09-16 18:37 广东
前端mihoyo多选题感觉挺难
1 回复 分享
发布于 2022-09-14 22:28 浙江
第一题是不是输出格式不对,我就是的,找半天才发现
1 回复 分享
发布于 2022-09-14 22:30 江苏
第二题力扣原题,滑动窗口,会的很简单
1 回复 分享
发布于 2022-09-15 15:45 广西
推荐去看这个大佬的题解:https://www.nowcoder.com/discuss/1051274
点赞 回复 分享
发布于 2022-09-14 22:15 广东
第二题用滑动窗口做
点赞 回复 分享
发布于 2022-09-14 22:21 浙江
第一题奇偶奇偶奇偶偶会存在问题,更优的解是偶奇偶奇偶奇偶,需要排除这个情况
点赞 回复 分享
发布于 2022-09-14 22:26 浙江
想问下第三题有uu知道有LeetCode原题吗
点赞 回复 分享
发布于 2022-09-15 10:59 内蒙古
笔试完了还在讨论技术
点赞 回复 分享
发布于 2022-09-15 15:59 安徽
666
点赞 回复 分享
发布于 2022-09-15 16:18 广东
C了两道,估计没了
点赞 回复 分享
发布于 2022-09-15 17:01 上海
咱俩第一题的答案写得一模一样
点赞 回复 分享
发布于 2022-09-15 18:38 上海
第三题 应该是溢出出现问题,没溢出的话时间最多32*n 不可能超时,建议不要直接乘,用一个变量k维护前一个要乘2^k
点赞 回复 分享
发布于 2022-09-16 12:26 广东
兄弟,*******从此秋招不迷路
点赞 回复 分享
发布于 2022-09-16 13:14 澳大利亚
投的是平台吗
点赞 回复 分享
发布于 2022-09-17 09:12 上海
恐怖😱
点赞 回复 分享
发布于 2022-11-17 11:20 上海

相关推荐

10-15 16:27
门头沟学院 C++
LeoMoon:建议问一下是不是你给他付钱😅😅
点赞 评论 收藏
分享
评论
15
54
分享
牛客网
牛客企业服务