12
返回列表 发新帖
楼主: zifanzzz
跳转到指定楼层
上一主题 下一主题
收起左侧

森鲜的脸家店面

🔗
hackenkreuz 2021-3-4 11:20:01 | 只看该作者
全局:
很有用的问题,可惜今天大米用完了,就回帖支持lz一下吧
回复

使用道具 举报

🔗
whiteboard 2021-3-5 23:59:14 | 只看该作者
全局:
follow up 1, c++的话用一个unordered_map和一个数组存unordered_map的iterator,这样insert和popRandom都可以O(1)

  1. //original
  2. vector<int> nums;

  3. void insert(int num)
  4. {
  5.     nums.push_back(num);
  6. }

  7. void popRandom()
  8. {
  9.     int n = nums.size();

  10.     int i = rand() % n;
  11.     nums[i] = nums.back();
  12.     nums.pop_back();
  13. }

  14. //follow up 1
  15. #define It unordered_map<int, int>::iterator
  16. unordered_map<int, int> maps; //{num, freq}
  17. vector<It> it_array;

  18. void insert_followup_1(int num)
  19. {
  20.     It it = maps.find(num);

  21.     if (it == maps.end()) {
  22.         maps[num] = 1;
  23.         it = maps.find(num);
  24.         it_array.push_back(it);
  25.     } else {
  26.         it->second++;
  27.     }   
  28. }

  29. void popRandom_followup_1()
  30. {
  31.     int n = maps.size();
  32.     int i = rand() % n;

  33.     It it = it_array[i];
  34.     if (--it->second == 0) {
  35.         maps.erase(it);
  36.         it_array[i] = it_array.back();
  37.         it_array.pop_back();
  38.     }   
  39. }
复制代码
回复

使用道具 举报

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

使用道具 举报

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

本版积分规则

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