Zoom 8.10前端两道编程题

  • 我看后端等其他方向已经有了好多解法的帖子了;前端的两道题目,虽然有大佬给出了做法提示,但还没有一个解法,所以这里总结了大佬们的观点,给出以下解法。
  • 当然,主要还是作为自己的记录贴,所以为了给自己看懂,有些口语化的描述;这是事后总结的,通过了几个示例,所以我也不能保证能AC;供有需要的小伙伴参考,如果有问题也欢迎指出来。
  • 笔试是ACM模式,这里是核心代码模式了,所以一些输入做了简化处理。
  • 我下次做笔试前一定要休息好!

一、不要互相嘲笑

  • 当时脑子蒙蒙的,想着保证Tom的起点不变,后面只要按照jerry的变化来就好了,所以求jerry的变化,再推出tom的最佳结果,再与实际结果比较,就知道改哪几个了。
  • 但是谁跟你说起点不变了??所以,`最佳思路是把tom和jerry的成绩看成两条线,只要这两条线平行即可。所以只要最少次修改tom的成绩,使得两条平行即可`
  • 这个做法和力扣2364. 统计坏数对的数目的思路很像,我那天双周赛就没做出来,可惜没有及时补上!
// tom:[1,2,-5,1,3]  jerry:[-1,0,3,-1,1]
    function howToChange(tom, jerry) {
      let delat = new Map(), maxCount = 0;
      for(let i = 0; i < tom.length; i++) {
        let res = tom[i] - jerry[i];
        if(delat.has(res)) {
          delat.set(res, delat.get(res) + 1)
        } else {
          delat.set(res, 1)
        }
        maxCount = Math.max(maxCount, delat.get(res))
      }
      return tom.length - maxCount;
    }
    console.log(howToChange([1,2,-5,1,3], [-1,0,3,-1,1]));  

二、社团的管理总量

  • 题目描述就有点复杂,社团的管理模式是树状的,根节点即最大boss是Monika,其序号为1,每个节点的管理数量是子节点的兴趣种类 + 子节点的管理数量[听着很像递归],最终求的是这个社团总的管理数量,即每个boss的管理数量的累加,还不是Monika的管理数量哦!
  • 输入也比较复杂了,当时看着这个输入就有点懵懵的。其实要做两件事,首先构建树;然后遍历树求管理数量[即所有子节点的爱好种类]
  • 首先是输入的人数n;字符串s表示每个人的兴趣用字母代替;然后是每个人的上下级关系。
  • 注意那个上下级关系并不会指明谁是领导[我当时以为没法构建关系了但是题干中说了Monika序号为1,他是最高领导即根节点,所以可以按序推导出其他的点。但是给的数据不是按序的,还要排序吗?还是从根节点了慢慢搜索比较,一层一层建构吧]
  • 但是也没有说1的下面一定是2吧?如果说1的下面是3,3的下面是2,那就给我的遍历带来麻烦了。[我忘了题目怎么说的,就按简单的来处理了] 先找1的子节点,比如说2、3;然后找2的子节点、3的子节点……。
  • 我觉得递归那里处理得不太好,有很多重复计算的过程,或许可以添加一个备忘录吧?但是map是从根节点开始遍历的,不是从最底下开始的,所以我也不知道怎么加这个备忘录
  •     console.log(ohMyMonika(5, 'abccd', ['1 2', '2 3', '2 4', '2 5'])); //  5
        console.log(ohMyMonika(1, 'ab', ['1 2'])); //  1
    
        function ohMyMonika(n, s, rArr) {
          // 用map来记录关系; count记录整理了的条数,当count === rArr.length时即整理完毕了
            let nodeVal = 1, map = new Map(), count = 0;
            while(count < rArr.length) {
              let childArr = []
              map.set(nodeVal, childArr)
              for(let i = 0; i < rArr.length; i++) {
                if(rArr[i].includes(nodeVal)) {
                  // 把子节点取出来
                  let index = rArr[i].indexOf(nodeVal);
                  let val = (index === 0? parseInt(rArr[i][2]):parseInt(rArr[i][0]));
                  // 把子节点存到map中去
                  childArr.push(val)
                  count++;
                  // 反手炸掉指挥部,即下次不要再遍历到相同的值了,所以赋个别的值改掉他
                  rArr[i] = 'boom'
                }
              }
              nodeVal++;
            }
            // 循环结束后,map即树就构建完了
            console.log(map);
    
            // 遍历构建总的管理量————应该有递归的,但是我想不清楚
            // 题目要求管理量是累加的,比如Monika的子节点是2,则Monika的管理量是直接管理的节点2和2的管理的点
            let sum = 0
            for(let item of map.keys()) {
              let res = getRes(item);
              sum += res;
            }
            return sum
    
            function getRes(item) {
              // 最末端的节点就返回0
              if(!map.has(item)) {
                return 0
              } else {
                let sum = 0;
                let arr = map.get(item);
                  // 使用set来过滤相同的值
                let set = new Set();
                for(let item1 of arr) {
                  sum += getRes(item1)
                  set.add(s[item1 - 1])
                }
                return sum + set.size;
              }
            }
        }



#ZOOM笔试#
全部评论
老哥zoom约面了吗
点赞 回复 分享
发布于 2022-08-27 11:14 安徽
zoom有限制语言吗
点赞 回复 分享
发布于 2022-08-14 21:18
当时通过了多少?
点赞 回复 分享
发布于 2022-08-13 07:25

相关推荐

03-06 18:20
门头沟学院 Java
点赞 评论 收藏
分享
01-30 22:03
门头沟学院 Java
用微笑面对困难:我滴妈,【俩月】【实习】【主管】仨debuff吃满了,独立设计开发的项目写了绝大占比的运营板块,你独立开发,那维护、问题复盘、日志更新、bug、策划书全是自己整的? 不建议写那么大,可以从小出发更容易
点赞 评论 收藏
分享
评论
1
13
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
11876次浏览 105人参与
# 你的实习产出是真实的还是包装的? #
2066次浏览 43人参与
# 米连集团26产品管培生项目 #
6224次浏览 216人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7731次浏览 43人参与
# 简历第一个项目做什么 #
31821次浏览 344人参与
# 重来一次,我还会选择这个专业吗 #
433658次浏览 3926人参与
# 巨人网络春招 #
11401次浏览 223人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187301次浏览 1122人参与
# 牛客AI文生图 #
21466次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152552次浏览 888人参与
# 研究所笔面经互助 #
118989次浏览 577人参与
# 简历中的项目经历要怎么写? #
310536次浏览 4228人参与
# AI时代,哪些岗位最容易被淘汰 #
64049次浏览 837人参与
# 面试紧张时你会有什么表现? #
30531次浏览 188人参与
# 你今年的平均薪资是多少? #
213244次浏览 1039人参与
# 你怎么看待AI面试 #
180316次浏览 1266人参与
# 高学历就一定能找到好工作吗? #
64351次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76644次浏览 374人参与
# 我的求职精神状态 #
448232次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363696次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160723次浏览 1112人参与
# 校招笔试 #
471601次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务