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

数据砖店面 挂经 求大米

 
全局:

2021(4-6月) 码农类General 硕士 全职@databricks - 猎头 - 技术电面  | | Fail | 在职跳槽

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

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

x
今天早上面的,hr一小时就发了邮件说挂了 非常效率。

地里原题。有一个系统,里面记录着每个customer产生的revenue,要你实现3个API:

1. insert(revenue): 一个新customer,产生了revenue,返回新customer的ID。customerID是自增ID,第一次insert是0,第二次是1,以此类推
2. insert(revenue, referrerID): 现有ID为referrerID的customer refer了一个新customer,产生了reven
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
ay里insert两个数就好(新customer的revenue和referrer的updated revenue),整体复杂度是O(N^2),在call第三个API特别多的时候这个反而是更快的。^^以上N为总客户个数。

当然可能有更好的数据结构,我水平有限就不瞎说了

评分

参与人数 9大米 +12 收起 理由
chihiro + 1 给你点个赞!
leafeonia + 1 很有用的信息!
xnd0423 + 1 给你点个赞!
fmusk + 1 给你点个赞!
TritonQ + 1 给你点个赞!

查看全部评分


上一篇:送餐公司 phone and onsite 虾图
下一篇:非死不可面经
全局:
为啥复杂度是O(n^2)?假设sorted array用treemap<revenue, set<CustomerId>> 来实现的话,
insert: O(logn)
search: O(logn + k) ?
回复

使用道具 举报

推荐
yfhsjtu 2023-5-2 07:06:53 | 只看该作者
全局:
匿名用户 发表于 2022-4-8 09:57
思路就是用Java TreeMap,以上是我写的代码

Line 39 有问题,这样就不是return K个数了
回复

使用道具 举报

地里匿名用户
推荐
匿名用户-1HIEF  2022-4-9 01:57:46
  1. import org.junit.jupiter.api.Assertions;
  2. import org.junit.jupiter.api.Test;

  3. import java.util.*;


  4. public class CustomerRevenue {
  5.     private int cid = 1;
  6.     private final TreeMap<Integer, HashSet<Integer>> revenueMap = new TreeMap<>();
  7.     private final HashMap<Integer, Integer> cidMap = new HashMap<>();

  8.     public void insert(int revenue) {
  9.         cidMap.put(cid, revenue);
  10.         revenueMap.computeIfAbsent(revenue, v -> new HashSet<>()).add(cid);
  11.         cid++;
  12.     }

  13.     public void insert(int revenue, int referralId) {
  14.         cidMap.put(cid, revenue);
  15.         cid++;
  16.         if (cidMap.containsKey(referralId)) {
  17.             int referralRevenue = cidMap.get(referralId);
  18.             if (revenueMap.containsKey(referralRevenue)) {
  19.                 revenueMap.get(referralRevenue).remove(referralId);
  20.                 if (revenueMap.get(referralRevenue).size() == 0) {
  21.                     revenueMap.remove(referralRevenue);
  22.                 }
  23.                 revenueMap.computeIfAbsent(referralRevenue + revenue, e -> new HashSet<>()).add(referralId);
  24.                 cidMap.put(referralId, referralRevenue + revenue);
  25.             }
  26.         }
  27.     }

  28.     public List<Integer> getKLowestRevenue(int k, int targetRevenue) {
  29.         List<Integer> result = new ArrayList<>();
  30.         int current = targetRevenue;
  31.         for (int i = 0; i < k; i++) {
  32.             int key = revenueMap.higherKey(current);
  33.             result.addAll(revenueMap.get(key));
  34.             current = key;
  35.         }
  36.         return result;
  37.     }

  38.     @Test
  39.     public void testCustomerRevenue() {
  40.         this.insert(100); // 1
  41.         this.insert(100); // 2
  42.         this.insert(200); // 3
  43.         this.insert(200); // 4
  44.         this.insert(300); // 5
  45.         this.insert(400); // 6

  46.         Assertions.assertIterableEquals(List.of(3, 4, 5, 6), getKLowestRevenue(3, 100));

  47.         this.insert(100, 2); // 7
  48.         Assertions.assertIterableEquals(List.of(2, 3, 4, 5, 6), getKLowestRevenue(3, 100));
  49.     }
  50. }
复制代码
思路就是用Java TreeMap,以上是我写的代码
回复

使用道具 举报

🔗
 楼主| llxujiji 2021-7-1 14:36:59 来自APP | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies

评分

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

查看全部评分

回复

使用道具 举报

🔗
ckc_cmu 2021-10-31 07:08:31 来自APP | 只看该作者
全局:
您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 100 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-BPWOK  2022-2-25 08:07:32
ckc_cmu 发表于 2021-10-30 15:08
跪求TreeMap search 如何是O(logn + k)
感觉TreeMap用higherEntry这个API的话每次调用都是O(logn),总 ...

我也觉得是logN + K,tree里面的iterator很难O(1)时间去下个点
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-YUOZD  2023-6-14 13:34:23
匿名用户 发表于 2022-4-8 09:57
思路就是用Java TreeMap,以上是我写的代码

如果getKLowestRevenue()里面set的size大于k,结果可能会有问题
回复

使用道具 举报

🔗
罗大宝 2023-7-25 13:11:40 | 只看该作者
全局:
感谢lz分享!好奇为啥挂了?
回复

使用道具 举报

🔗
taucross 2023-10-28 05:00:38 | 只看该作者
全局:
本帖最后由 taucross 于 2023-10-27 14:02 编辑

get_k_lowest用binary search。
  1. class Revenue {
  2. public:
  3.   Revenue() : id(0) {}

  4.   int insert(int revenue) {
  5.     r[id] = revenue;
  6.     ids[revenue].insert(id);
  7.     return id++;
  8.   }

  9.   int insert(int revenue, int referrer_id) {
  10.     r[id] = revenue;
  11.     ids[revenue].insert(id);

  12.     // update referrer's revenue.
  13.     ids[r[referrer_id]].erase(referrer_id);
  14.     r[referrer_id] += revenue;
  15.     ids[r[referrer_id]].insert(referrer_id);

  16.     return id++;
  17.   }

  18.   vector<int> get_k_lowest(int k, int target) {
  19.     // ids.upper_bound() finds first element > target.
  20.     // use ids.lower_bound() if want first element >= target.
  21.     map<int, unordered_set<int>>::iterator iter = ids.upper_bound(target);

  22.     vector<int> result;
  23.     while (result.size() < k && iter != ids.end()) {
  24.       unordered_set<int>::iterator it = iter->second.begin();
  25.       while (result.size() < k && it != iter->second.end()) {
  26.         result.push_back(*it++);
  27.       }
  28.       iter++;
  29.     }
  30.     return result;
  31.   }

  32. private:
  33.   int id;
  34.   unordered_map<int, int> r;          // r[id] = revenue
  35.   map<int, unordered_set<int>> ids;   // ids[revenue] = set of ids with revenue.
  36. };
复制代码
回复

使用道具 举报

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

本版积分规则

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