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

Pocket Gems面经题求助

全局:

2016(10-12月) 码农类General 硕士 实习@ - Other - 技术电面  | | Other | 应届毕业生

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

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

x
这两天就要面试第二轮了,在地里看见到面经题毫无思路,求各路大神帮助,在此跪谢!传说中的背包装宝石题目,地理最近好多人电面问到了。

/*
You’re playing your favorite RPG, and your character has just found a room full of treas
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限 或 查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
ter has just found a room full of treasure. You have n inventory slots. Luckily, objects of the same type stack together, with the maximum size ...

评分

参与人数 2大米 +8 收起 理由
singer82 + 3 很有用的信息!
newgod2500 + 5 感谢分享!

查看全部评分


上一篇:请问有没有人做过Coupang的OA啊?
下一篇:BB电面

本帖被以下淘专辑推荐:

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

使用道具 举报

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

使用道具 举报

推荐
kunge12345 2016-12-28 13:25:13 | 只看该作者
全局:
这题就是greedy吧,看面经很多人说用个堆,然后就能转换成top K了,不太能明白。。。我用的最朴素的办法。。。放一个算一下。。。
  1. class Tuple{
  2.     String name;
  3.     int value;
  4.     int maximum_stack_size;
  5.     public Tuple(String name, int value, int maximum_stack_size){
  6.         this.name = name;
  7.         this.value = value;
  8.         this.maximum_stack_size = maximum_stack_size;
  9.     }
  10. }

  11. public class Main {

  12.     public static int maxValue(int n, String[] items, Tuple[] item_infos){
  13.         int val = 0;
  14.         HashMap<String, Integer> maxMap = new HashMap<>();
  15.         HashMap<String, Integer> valMap = new HashMap<>();
  16.         HashMap<String, Integer> countMap = new HashMap<>();
  17.         for (Tuple item_info : item_infos){
  18.             maxMap.put(item_info.name, item_info.maximum_stack_size);
  19.             valMap.put(item_info.name, item_info.value);
  20.         }
  21.         for(String item : items){
  22.             countMap.put(item, countMap.getOrDefault(item, 0) + 1);
  23.         }
  24.         for(int i = 0; i < n && !countMap.isEmpty(); i++){
  25.             int max = 0;
  26.             String select = "";
  27.             int num = 0;
  28.             for (String item : countMap.keySet()){
  29.                 int count = countMap.get(item);
  30.                 if(count >= maxMap.get(item)){
  31.                     if(maxMap.get(item) * valMap.get(item) > max) {
  32.                         select = item;
  33.                         num = maxMap.get(item);
  34.                         max = maxMap.get(item) * valMap.get(item);
  35.                     }
  36.                 }
  37.                 else{
  38.                     if (count * valMap.get(item) > max){
  39.                         select = item;
  40.                         num = count;
  41.                         max = count * valMap.get(item);
  42.                     }
  43.                 }
  44.             }
  45.             val += max;
  46.             if(!select.equals("")){
  47.                 countMap.put(select, countMap.get(select) - num);
  48.                 if (countMap.get(select) == 0){
  49.                     countMap.remove(select);
  50.                 }
  51.             }
  52.         }
  53.         return val;
  54.     }

  55.     public static void main(String[] args) {
  56.         // write your code here
  57.         Tuple[] tuples = new Tuple[3];
  58.         tuples[0] = new Tuple("diamond", 10, 5);
  59.         tuples[1] = new Tuple("ruby", 5, 5);
  60.         tuples[2] = new Tuple("armor", 25, 1);
  61.         String[] items = {"diamond", "ruby", "armor", "diamond", "diamond", "ruby", "diamond", "diamond", "diamond", "diamond",
  62.          "diamond", "armor"};
  63.         System.out.println(maxValue(3, items, tuples));

  64.     }
  65. }
复制代码

评分

参与人数 1大米 +3 收起 理由
cxb1027 + 3 感谢分享!

查看全部评分

回复

使用道具 举报

🔗
 楼主| xiuluoxn 2016-12-28 12:44:21 | 只看该作者
全局:
上面题目被截断了
回复

使用道具 举报

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

使用道具 举报

🔗
kunge12345 2016-12-28 14:03:59 | 只看该作者
全局:
我的理解是,对于每个item,可以用总的个数除以一个stack最多能放的个数,得到放满的stack个数,并算这些stack的value,并且丢到heap里面,然后再算余数对应stack的value,丢到heap里去,最后取top k...我不明白的事....这么算复杂度真的有优化么?假设k很小,item很多...岂不是做了很多没必要的维护堆的操作?sift up/sift down
回复

使用道具 举报

🔗
 楼主| xiuluoxn 2016-12-28 14:21:17 | 只看该作者
全局:
听你这么一说忽然有点理解了heap做法。
回复

使用道具 举报

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

使用道具 举报

🔗
kunge12345 2016-12-28 23:06:37 | 只看该作者
全局:
xiuluoxn 发表于 2016-12-28 17:05
突然想到heap的优化了, 你的code复杂度是O(k*n), 相对于每个slot, worst case要遍历整个items(或余下的) ...

有道理!这样就比朴素方法好了!
回复

使用道具 举报

🔗
reboot329 2016-12-28 23:23:03 | 只看该作者
全局:
我是按每种东西的最大数量打包,不够的也打成一个包。PQ存包,comparator按照包里的总价值,然后就是k largest了。。
回复

使用道具 举报

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

本版积分规则

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