题解 | #放苹果#

小米Git

http://www.nowcoder.com/practice/4fcd94851d9142458329fd1d3e5802a8

/**

  • 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
  • @param matrix string字符串一维数组
  • @param versionA int整型
  • @param versionB int整型
  • @return int整型 / /* 本来粗略读题应该就是转换为两个链表的第一个公共节点问题,但是偷懒没有去实现链表了, 直接求得路径A,路径B,两个数组求交集的最后一位就是第一个公共节点。 同样通过创建hashmap的方式简化树结构,来进行递归 递归过程就一条,循环遍历每条数组

0 => 3

跳到3:[0, 3] => 忽略前面路径中已有的0 => 1

跳到1:[0, 3, 1] => 忽略已有的3 => 8 ....

...

{
  '0': [ 3 ],
  '1': [ 3, 8, 9 ],
  '2': [ 9 ],
  '3': [ 0, 1, 6 ],
  '4': [ 9 ],
  '5': [ 7 ],
  '6': [ 3 ],
  '7': [ 5, 9 ],
  '8': [ 1 ],
  '9': [ 1, 2, 4, 7 ]
}

实际上如果自己做树结构,不管二叉树还是普通树,应该都是从小到大有个顺序排列吧。 可是这题顺序是随机的,不然通过得到的map去判断公共节点就太简单了 */


function Git( matrix ,  versionA ,  versionB ) {
//     class Node {
//         constructor(element) {
//             this.element = element
//             this.next = null
//         }
//     }
//     class List {
//         constructor() {
//             this.head = new Node('head')
//         }
//         inser(element, item) {
//             let current = this.find(item)
//             if(!current) return null
//             let newNode = new Node(item)
//             newNode = current.next
//             current.next = newNode
//         }
//         find(item) {
//             let temp = this.head
//             while (temp && temp.element!=item) {
//                 temp = temp.next
//             }
//             return temp
//         }
//     }
   if (versionA == 0 || versionB == 0) return 0 //特殊处理0,0的情况
//     if (versionA ==  versionB) return versionA
   let table = matrix.reduce((p, c, idx) => {
       for (let i = 0; i < c.length; i++) {
           if(c[i] == 1) p[idx]? p[idx].push(i) : p[idx] = [i]
       }
       return p
   }, {})
   let resA = [], resB = []
   function dfs(temp = [0], idx = 0){
//         if(!table[idx]) return
       if(idx == versionA) resA = [...temp]
       if(idx == versionB) resB = [...temp]
        table[idx].forEach(val => {
           if(!temp.includes(val)){
              return dfs(temp.concat(val), val)
           }
        })
   }
   dfs()
   let same = resA.filter(e => resB.includes(e))
   let res = same[same.length-1]
   // write code here
   return res
}
module.exports = {
   Git : Git
};
全部评论

相关推荐

找个工作&nbsp;学历是要卡的&nbsp;要求是高的&nbsp;技能不足是真的&nbsp;实习经验是0的&nbsp;简历无处可写是事实的&nbsp;钱不好赚是真的&nbsp;想躺平又不敢躺&nbsp;也不甘心躺&nbsp;怕自己的灵感和才华被掩埋甚至从未被自己发现&nbsp;又质疑自己是否真正有才华
码农索隆:你现在啊,你心里都明白咋回事,但是你没办法改变现状,一想到未来,你又没有信心狠下心来在当下努力。 得走出这种状态,不能一直困在那里面,哪不行就去提升哪,你一动不动那指定改变不了未来,动起来,积少成多才能越来越好
点赞 评论 收藏
分享
05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
投递美团等公司9个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务