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

奇怪的一道题

🔗
匿名用户-FMSAC  2021-8-31 07:42:56 |倒序浏览

2021(7-9月) 码农类General 硕士 全职@meta - 内推 - Onsite  | 😐 Neutral 😣 Hard | Other | 在职跳槽

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

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

x
本帖最后由 匿名 于 2021-8-30 16:47 编辑

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





评分

参与人数 2大米 +10 收起 理由
s7725012156 + 2 给你点个赞!
匿名用户-MKXCC + 8

查看全部评分


上一篇:亚麻 new grad OA
下一篇:Indeed Onsite
推荐
WooMeow 2021-9-1 00:47:33 | 只看该作者
全局:
抛砖引玉。。看了一下说只需要实现query,也就是说我们可以假定data structure是个BST。然后这道题就是一个包装了一层的LC原题:给定一个BST,求两个数之间所有node的和

评分

参与人数 1大米 +1 收起 理由
boboxzwj999 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

推荐
madrid 2021-9-7 06:51:44 | 只看该作者
全局:
本帖最后由 madrid 于 2021-9-6 15:53 编辑

利用segment tree的思路,在插入节点时更新每个node的sum的值。
  1.     class Node {
  2.         public Node left;
  3.         public Node right;
  4.         public int start;
  5.         public int end;
  6.         public int sum;
  7.         public Node(int start, int end) {
  8.             this.start = start;
  9.             this.end = end;
  10.             this.sum = 0;
  11.         }
  12.     }
  13.    
  14.     private Node root;
  15.     public Solution(int[] nums) {
  16.         root = buildTree(nums,0,nums.length-1);
  17.     }
  18.    
  19.     private Node buildTree(int[] nums, int start, int end) {
  20.         if (start > end) return null;
  21.         Node node = new Node(start, end);
  22.         if (start == end) {
  23.             node.sum = nums[start];
  24.         } else {
  25.             int mid = (start + end) >> 1;
  26.             node.left = buildTree(nums, start, mid);
  27.             node.right = buildTree(nums, mid+1, end);
  28.             node.sum = node.left.sum + node.right.sum;
  29.         }
  30.         return node;
  31.     }
  32.    
  33.     public void update(int i, int val) {
  34.         update(root,i,val);
  35.     }
  36.    
  37.     private void update(Node root, int i, int val) {
  38.         if (root.start == i && root.end == i) {
  39.             root.sum = val;
  40.             return;
  41.         }
  42.         int mid = (root.start + root.end) / 2;
  43.         if (i<=mid) {
  44.             update(root.left, i, val);
  45.         } else {
  46.             update(root.right, i, val);
  47.         }
  48.         root.sum = root.left.sum+root.right.sum;
  49.     }
  50.    
  51.     private int sumRange(Node root, int left, int right) {
  52.         if (left>right || root == null) return 0;
  53.         if (root.start==left && root.end==right) return root.sum;
  54.         int mid = (root.start+root.end)>>1;
  55.         return sumRange(root.left,left,mid)+sumRange(root.right,mid+1,right);
  56.     }
  57.    
  58.     public int sumRange(int i, int j) {
  59.         return sumRange(root,i,j);
  60.     }
复制代码
回复

使用道具 举报

地里匿名用户
推荐
匿名用户-QY8IP  2021-9-7 09:39:00
madrid 发表于 2021-9-6 17:51
利用segment tree的思路,在插入节点时更新每个node的sum的值。

这题目是求值在 [min, max]间的和而不是矩阵系数在[min,max]的和,segment tree方向是不是搞错了?
回复

使用道具 举报

🔗
hfpt2020 2021-8-31 09:16:46 | 只看该作者
全局:
本帖最后由 hfpt2020 于 2021-8-30 21:20 编辑

segment tree
BIT


对不起
上面不对. 读错了.
是个stream....BST?
回复

使用道具 举报

🔗
tl2k3 2021-8-31 12:34:04 | 只看该作者
全局:
本帖最后由 tl2k3 于 2021-8-30 22:27 编辑

没理解错的话,用hashmap记录每个value的idx,再用prefix sum就行了吧....

理解错了... 应该是用BIT,存不大于k的所有数之和,可以算出任意区间的和

回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QY8IP  2021-9-1 00:04:21
能展开说下这道题目如何解吗?
回复

使用道具 举报

🔗
沙场小兵 2021-9-1 01:02:37 | 只看该作者
全局:
stream range sum。。 在刷题网有原题的。。三菱三和散灵气,segment tree
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QY8IP  2021-9-1 23:43:28
楼上理解错了吧,楼主说的是Range between [low, high], 你给的题号是index between [low, high]
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QY8IP  2021-9-1 23:43:59
WooMeow 发表于 2021-8-31 11:47
抛砖引玉。。看了一下说只需要实现query,也就是说我们可以假定data structure是个BST。然后这道题就是一个 ...

请问题号是多少?
回复

使用道具 举报

🔗
caymantear 2021-9-7 02:13:06 | 只看该作者
全局:
WooMeow 发表于 2021-8-31 09:47
抛砖引玉。。看了一下说只需要实现query,也就是说我们可以假定data structure是个BST。然后这道题就是一个 ...

LC 938? 可是O(N)的时间复杂度感觉完全没有优化啊
回复

使用道具 举报

🔗
caymantear 2021-9-7 02:20:32 | 只看该作者
全局:
我觉得题意是只关心query 的时间复杂度,应该还是用hashmap最高效。
回复

使用道具 举报

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

本版积分规则

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