回复: 27
跳转到指定楼层
上一主题 下一主题
收起左侧

snap VO 废

全局:

2023(4-6月) 码农类General 博士 全职@snapchat - 猎头 - Onsite  | 😐 Neutral 😐 Average | Fail | 在职跳槽

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
面了有两个多月了,因为有一题一直不知道怎么做,还是发出来看看有没有更好的解法。

店面是给二叉树加个next 链接那题,这题不在tag里。知道有个很巧妙的解法,一时半会想不起来,就来了个层序遍历解。
做完问能不能优化,这会也大概想起来具体解法了,就回忆着写出了。是个烙印在那边7-8年了,还很有热情不容易,负责
一些scope挺大的项目。夸了他几句,告诉我这轮过了
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies

前面心情不佳有影响。
最后一轮设计distributed cache,面试官很满意。每轮都有一些bq题,不觉得会丢分。

第一轮的题很想知道到底在考什么,有很smart的解法吗?

评分

参与人数 2大米 +11 收起 理由
呆呆大师兄 + 1 很有用的信息!
匿名用户-0TQVT + 10

查看全部评分


上一篇:Belvedere Trading Quant OA NG
下一篇:❄️第一轮面
地里匿名用户
推荐
匿名用户-G8U2V  2023-9-4 03:24:22
realife 发表于 2023-9-3 18:18
你的意思是【1,2】,【1,3】,【1,1】这些都在节点1汇合?
这样找不出最长路径啊,而且【1,1】这种 ...

  1. d = [[1, 2], [4, 5], [2, 2], [2, 3]]

  2. g = defaultdict(list)

  3. for i, (a, b) in enumerate(d):
  4.     g[a].append(i)
  5.     if a != b:
  6.         g[b].append(i)

  7. # defaultdict(list, {1: [0], 2: [0, 2, 3], 4: [1], 5: [1], 3: [3]})
复制代码
然后对每个value array做union find 求最大组吧
回复

使用道具 举报

全局:
  1. class TreeNode:
  2.     def __init__(self, val=0, left=None, right=None, next=None):
  3.         self.val = val
  4.         self.left = left
  5.         self.right = right
  6.         self.next = next

  7. def connect(root):
  8.     if not root:
  9.         return root

  10.     level_start = root  # 指向每一层的起始节点

  11.     while level_start:
  12.         current = level_start  # 用于遍历当前层级的节点
  13.         next_level_start = None  # 用于指向下一层级的起始节点

  14.         while current:
  15.             if current.left:
  16.                 if next_level_start is None:
  17.                     next_level_start = current.left
  18.                 else:
  19.                     current.next = current.left
  20.                 current = current.left

  21.             if current.right:
  22.                 if next_level_start is None:
  23.                     next_level_start = current.right
  24.                 else:
  25.                     current.next = current.right
  26.                 current = current.right

  27.             current = current.next  # 移动到当前层级的下一个节点
  28.         level_start = next_level_start  # 移动到下一层级的起始节点
  29.     return root

  30. # 示例用法:
  31. # 创建一个二叉树
  32. #        1
  33. #       / \
  34. #      2   3
  35. #     / \   \
  36. #    4   5   7
  37. root = TreeNode(1)
  38. root.left = TreeNode(2)
  39. root.right = TreeNode(3)
  40. root.left.left = TreeNode(4)
  41. root.left.right = TreeNode(5)
  42. root.right.right = TreeNode(7)

  43. # 连接每个节点到它的下一个相邻节点
  44. connected_root = connect(root)

  45. # 打印连接后的二叉树
  46. print(connected_root.left.next.val)  # 输出 3,因为 2 的下一个相邻节点是 3
  47. print(connected_root.left.left.next.val)  # 输出 5,因为 4 的下一个相邻节点是 5
复制代码
回复

使用道具 举报

推荐
2013fall 2023-9-17 07:27:38 | 只看该作者
全局:
店面那题的“另一种”解法是利用node.next.left/right吧?感觉有很多edge case,BFS简单直接,面试够用了吧哈哈
  1. public class ConnectNextRight {
  2.     public Node connect(Node root) {
  3.         if (root == null) {
  4.             return null;
  5.         }
  6.         
  7.         Queue<Node> queue = new LinkedList<>();
  8.         queue.offer(root);
  9.         
  10.         while (!queue.isEmpty()) {
  11.             int levelSize = queue.size();
  12.             Node prev = null;
  13.             
  14.             for (int i = 0; i < levelSize; i++) {
  15.                 Node current = queue.poll();
  16.                
  17.                 if (prev != null) {
  18.                     prev.next = current;
  19.                 }
  20.                
  21.                 prev = current;
  22.                
  23.                 if (current.left != null) {
  24.                     queue.offer(current.left);
  25.                 }
  26.                 if (current.right != null) {
  27.                     queue.offer(current.right);
  28.                 }
  29.             }
  30.         }
  31.         
  32.         return root;
  33.     }
  34. }
复制代码
回复

使用道具 举报

全局:
不能按end排序,用start binary search来build edge吗
回复

使用道具 举报

🔗
 楼主| realife 2023-9-3 06:28:15 | 只看该作者
全局:
金元宝儿 发表于 2023-9-2 15:20
不能按end排序,用start binary search来build edge吗

不明白什么意思,怎么找最长呢?一张牌只能用一次,【1,2】了就不能再按【2,1】备选

忘了说点数是从0到6,还有个条件是说最多26张牌,就是不知道这个有什么用处
回复

使用道具 举报

🔗
 楼主| realife 2023-9-3 11:52:20 | 只看该作者
全局:

这题不用recursion是最符合要求的解法
我一开始以为是贴了domino那题的解法呢
回复

使用道具 举报

全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Popular Interview Questions from Top Companies
回复

使用道具 举报

全局:
感觉domino那题是扫一遍建个图,然后找图里面的最长路径。
回复

使用道具 举报

🔗
 楼主| realife 2023-9-4 02:02:40 | 只看该作者
全局:
richard_515 发表于 2023-9-3 10:30
感觉domino那题是扫一遍建个图,然后找图里面的最长路径。

我一直没有弄明白的就是一张牌可以翻面,等于有两个选择。如果没有smart的方法处理的话就等于有
2 ^n条路径。不知道你讲的建图是怎么建的
回复

使用道具 举报

全局:
realife 发表于 2023-09-03 11:02:40
我一直没有弄明白的就是一张牌可以翻面,等于有两个选择。如果没有smart的方法处理的话就等于有
2 ^n条路径。不知道你讲的建图是怎么建的
可以翻面就是无向图,节点就是1,2,3这些数字,每张牌都是一个路径。感觉自己连自己的路径需要处理一下。
回复

使用道具 举报

🔗
 楼主| realife 2023-9-4 02:18:55 | 只看该作者
全局:
richard_515 发表于 2023-9-3 11:05
可以翻面就是无向图,节点就是1,2,3这些数字,每张牌都是一个路径。感觉自己连自己的路径需要处理一下。

你的意思是【1,2】,【1,3】,【1,1】这些都在节点1汇合?
这样找不出最长路径啊,而且【1,1】这种成环的怎么处理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表