9.17 滴滴前端笔试

题型:1.5h、选择题X20 + 编程X2

选择题:

考得有点杂,有数据库、Linux的东西,但是基础的html、css、js考察得比较简单。记几个印象比较深的吧!
  1. <img><table>哪个是语义化标签 —— table不是语义化标签
  2. jQuery里选择this的方法是 —— $(this),误导选项有$('this')
  3. 哪些排序算法是交换算法—— 冒泡排序和快速排序

编程题:

  1. 两道模拟题,思路很容易想到,但编程费点事情。供参考,不保证能AK
  2. 对于多个条件判断的情况要及时检验,如第2题,即写好一个就打印看看,有问题就及时解决,不然太乱了,都不知道问题出在哪里了
  3. 要多练习,不然光有思路也做不出来,第2题踩了一个坑,怎么判断都不对,如下面arr[index + 1] !== 1那里没考虑到,数组中的数据是字符串,即是‘1’,而不是1。所以要么提前把字符串转为数字,要么用“==”判断
    // 处理头部的问号
     if(item === '?' && index === 0) {
       if(arr[index + 1] == undefined || arr[index + 1] !== 1) {
           tempArr.push(1);
        } else if (arr[index + 1] === 1) {
           tempArr.push(2);
         }
     }

一、破译密码

发送方会对密码做如下加密,如欲发送y,会将y的二进制数中1的个数记为x,将加密后的数y*x发送出去,接收方拿到数据z后,进行解密,返回可能的原数据y。如接收到54054,解密后可能结果为[9009, 7722, 6006]。输出结果的个数和按的顺序的字符串即输出 3 6006 9009 7722
思路:
  • 逆向暴力求解,即记原数据所乘的个数x为i,通过for循环i,得到原数据y,再去验证y变成二进制数据后1的个数是否为i,相等即可行。思路很简单,但是有一个问题,for循环i的范围是多少,我想的是慢慢试,比如1-50、不能AC就1-100…… 但是怎么试都只通过9%,后来才发现题目里要求结果按从小到大输出,吐血! 下面就默认i的范围是1-50
  • 那么能不能确定下i的范围呢?还是希望这个范围能尽量小的。假如设原数据转二进制后1的个数为x,那么原数据最小为2^x-1即接收的值z >= x*(2^x-1),这个应该能得到x的范围,或者有没有其他方法?
function getRes(num) {
  let res = [];
  for(let i = 1; i < 11; ++i) {
    if(num % i === 0 && judgeI(num, i)) {
      res.push(num/i)
    }
  }
  console.log(res.length);
  console.log(res.sort().join(' '));

}

function judgeI(num, i) {
  let origin = num/i, count = 0
  // 将原来的数转成二进制
  let arr = [...origin.toString(2)];
  arr.map(i => {if(i == '1'){count++}})
  return count == i? true:false;
}
getRes(54054); // 3    6006 7722 9009

二、恢复被墨水污染的实验数据

即一串非负正整数数字,其中部分位数被墨水污染了记为‘?’,但是该数据符合以下的规则。要求将数据恢复,并使得数据最小。例如输入'?12?0?9??',输出'212101902'。
  1. 首位不能是0;
  2. 相邻数字不相同
  3. 这个数可以被3整除
思路:
  1. 用map遍历原字符串数组,遇到‘?’就看看给个最合适的且最小的值,记住最后一个"?"除了不能和两边的相同,而且还要保证该数可以被3整除。为啥要最后一个保3呢?因为要求数据最小,所以高位数据尽量小,最后一位在“保3”的基础上尽量小!
  2. 一个数能被3整除的充要条件是它各位之和也要能被3整除
  3. 下面函数的输入已经将字符变为数组了
    function getRes(arr) {
      // 最后一个的序号要用它“保三”
      let lastIndex = arr.lastIndexOf("?");
      let tempArr = [];
      arr.map((item, index) => {
          // 处理头部的问号
          if(item === '?' && index === 0) {
            if(arr[index + 1] == undefined || arr[index + 1] != 1) {
              arr[index] = 1;
            } else if (arr[index + 1] == 1) {
              arr[index] = 2;
            }
          } else if(item === '?' && index < lastIndex) {
            // 处理中间的'?'
            for(let i = 0; i <= 9; ++i) {
              if(arr[index - 1] != i && arr[index + 1] != i) {
                arr[index] = i;
                // 找到一个就跳出
                break;
              }
            }
          } else if (index === lastIndex) {
            // 处理最后的问号,要复杂一点
            // 先求出除最后一个"?"外所有的值和
            let sum = 0;
            arr.forEach((element) => {
              if (element !== "?") sum += parseInt(element);
            });
    
            for (let i = 0; i <= 9; ++i) {
              if (
                arr[index - 1] != i &&
                (arr[index + 1] == null || arr[index + 1] != i)
              ) {
                  console.log(sum);
                // 看能不能'保三'
                if ((sum + i) % 3 === 0) {
                  arr[index] = i;
                   // 找到一个就跳出循环
                  break;
                }
              }
            }
          }
        }
      )
      return arr.join("");
    }
    
    console.log(getRes(["?", "1", "2", "?", "0", "?", "9", "?", "?"]));








#滴滴##滴滴笔试##前端#
全部评论
第一题,题目是设y=xf(x),其中f(x)为x转为二进制后的1个数。输入为y,求满足函数的x个数。我求法是先求出y所需的二进制表示位数n(也就是x的最大值),然后for循环遍历i=1~n,反求出x,并计算x中包含1的个数m,判断i是否等于m,如果判断成立则满足条件。但是只A了73%,不知道哪里还有问题。抛砖引玉。
1 回复 分享
发布于 2022-09-18 14:10 江苏
https://www.whyknown.com/ ===> 如何精通面试,获取前端面试资源,吊打大厂面试官,通过面试题查缺补漏,秋招、社招一战成名。免费开源前端|面试进阶之道,快来学习,会更新各大厂的面试真经和答案,每个面试题从源码角度和可调试、尝试角度出发,祝你成功!===> https://www.whyknown.com/
点赞 回复 分享
发布于 2022-09-18 15:12 北京
hi~同学,秋招遇“寒气”,牛客送温暖啦!23届秋招笔面经有奖征集中,参与就得牛客会员7天免费体验,最高赢300元京东卡!戳我去看>>>https://www.nowcoder.com/link/zhengjipinglun
点赞 回复 分享
发布于 2022-09-19 12:37 北京

相关推荐

导❤师❤不❤在❤实验室,一个人❤投❤投❤投简历最香❤岗位,校招生无法抗拒❤薪资一、面试流程:‌面试通常包含自我介绍、‌项目介绍、‌技术提问等环节。‌自我介绍后,‌面试官会深入了解简历中所做的项目,‌包括使用的技术、‌遇到的困难及解决方法。‌技术提问可能涵盖编程语言、‌数据结构、‌算法、‌计算机网络等多个方面‌。‌面试内容深度:‌涉及基础知识的深度考察,‌如Java集合、‌多线程、‌锁等,也可能手撕代码面试氛围与感受:‌整体面试氛围较为轻松,‌面试官态度友好,‌会给予应聘者积极的回应和引导。‌答不出来也会给予提示,耐心引导,整体比较愉快二、滴滴2025届校招提前批正式启动啦!🚘岗位类别工程类/算法类/机器人类/数据类/安全技术类/产品类/运营类/职能类等🚘投递要求2024年9月~2025年8月之间毕业的海内外高校毕业生,每人可投递1个岗位🚘工作地点北京/杭州/上海/广州等🚘招聘流程简历投递-简历筛选-笔试-面试-Offer发放三、面试预约:滴滴面试采用预约制,因为面试的候选人比较多,收到面试预约邮件后尽早选择合适的面试时间,面试席位预约满后会提前关闭,就约不上啦,如果已经招到了合适的候选人,后续就不一定再约面试了,所以一定要尽早选择面试时间,如果没有什么特别的事,也尽量不要修改面试时间四、竞争比较小,进面概率较高岗位:去年秋招是前端,算法,客户端,今年HR同步之后给大家更新,不过也大差不差比较卷的岗位:后端,各个大厂后端简历量都比较多,安排起来就会比较慢,大家耐心等待吧,也可以考虑投一下客户端公司福利薪资在大厂中也算是比较有竞争力的,节假日各种礼包,桔厂周边,校招礼包,司庆礼盒少不了,速来来解锁,小零食,免费晚饭工作氛围我觉得能算得上大厂中的WLB吧,早上10点左右上班,实习生晚上6点左右走,正式员工有工作的话会稍微晚一点,整个工作氛围比较轻松,mentor也比较nice,有工作生活方面的问题可以多找mentor聊聊。身边的同事也都很不错,更重要一点,没有什么学历歧视,大家就算学校不是特别好也不用担心,滴滴也是很注重候选人个人素质的,所以好好准备🚘投递方式【内推链接】https://app.mokahr.com/m/campus_apply/didiglobal/96064?recommendCode=DSW46Dg7&amp;amp;amp;hash=%23%2Fjobs#/jobs【内推码】DSW46Dg7立刻投递,快人一步,抢跑未来全流程跟进,投递的同学评论区留言,方便后续跟进,秋招加油!#应届# #校招# #滴滴# #滴滴出行# &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
点赞 评论 收藏
分享
评论
3
9
分享

创作者周榜

更多
牛客网
牛客企业服务