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

一道某搜索公司的onsite题

🔗
lalasparrow 2017-11-24 07:06:43 | 只看该作者
全局:
chenxiaocong 发表于 2017-11-23 23:59
我的想法是,
1.把主视图由低到高排序,得到一个数组heights,然后再存一个sums数组,每一位是相对应heigh ...

这个解法好厉害啊..
相当于利用主视图来进行当前最优解,然后再利用左视图,在里面找左视图当前点那行的最优值..
点赞..
回复

使用道具 举报

🔗
hychin 2017-11-24 08:02:38 | 只看该作者
全局:
chenxiaocong 发表于 2017-11-23 23:59
我的想法是,
1.把主视图由低到高排序,得到一个数组heights,然后再存一个sums数组,每一位是相对应heigh ...

可以讲讲这么做的理由吗?没太看懂老实讲
回复

使用道具 举报

🔗
hychin 2017-11-24 08:51:20 | 只看该作者
全局:
貌似突然想明白了 这个相当于在主视图那块准备了不同高度的面包切片 然后从组合起来左视图那块选出高度符合要求的面包片

评分

参与人数 1大米 +3 收起 理由
UUOlidd + 3 欢迎来一亩三分地论坛!

查看全部评分

回复

使用道具 举报

🔗
kyo 2017-11-24 08:59:26 | 只看该作者
全局:
15daysleft 发表于 2017-11-24 06:36
你这个做法是对的 也是当时我最先想出来的做法
然后面试官说还可以继续优化到不需要sum数组。。我当时就 ...

求问大佬,如果n是边长的话,主视图和左视图都有n个元素,按照大佬的思路排好顺序后,每个左视图对应的主视图都要向右扫一遍,时间为O(n), 一共有n个左视图, 总的Worst Case时间复杂度为O(n^2), 请问大佬是怎么分析出O(nlogn)的? 求指教
回复

使用道具 举报

🔗
hychin 2017-11-24 09:06:25 | 只看该作者
全局:
大佬的想法你不懂的 我懂了已经
回复

使用道具 举报

🔗
ICong 2017-11-24 09:10:09 | 只看该作者
全局:
chenxiaocong 发表于 2017-11-23 23:59
我的想法是,
1.把主视图由低到高排序,得到一个数组heights,然后再存一个sums数组,每一位是相对应heigh ...

这个解法很棒, 想请问复杂度O(NlogN)是为什么呀?排序和二分查找一共的复杂度?
回复

使用道具 举报

🔗
hychin 2017-11-24 09:20:12 | 只看该作者
全局:
饶有兴致的写了一下代码,复杂度是 O(klogk) where k = max(m, n)
int max_volume(vector<int> main_view, vector<int> left_view){
  if(main_view.size() == 0 || left_view.size() == 0) return 0;
  int m = left_view.size(), n = main_view.size();
  int max_area = 0, rolling_sum = 0, acc_sum = 0;
  sort(main_view.begin(), main_view.end());
  sort(left_view.begin(), left_view.begin());

  for(int i = 0, j = 0; i < n; i++){
          acc_sum += main_view[i];
          rolling_sum = acc_sum + (n - i - 1) * main_view[i];
          while(left_view[j] <= main_view[i] && j < m) {
                  max_area += rolling_sum;
                  j++;
          }
  }
  return max_area;
}
回复

使用道具 举报

🔗
jzl921111 2017-11-24 09:21:18 | 只看该作者
全局:
kyo 发表于 2017-11-24 08:59
求问大佬,如果n是边长的话,主视图和左视图都有n个元素,按照大佬的思路排好顺序后,每个左视图对应的主 ...

不用 排好序后总共扫一遍就行了 类似于merge two sorted arrays
回复

使用道具 举报

🔗
wjwmichael 2017-11-24 09:25:15 | 只看该作者
全局:
chenxiaocong 发表于 2017-11-23 23:59
我的想法是,
1.把主视图由低到高排序,得到一个数组heights,然后再存一个sums数组,每一位是相对应heigh ...

左视图[5,4,3], 主视图[5, 3, 1]。 先排序主视图得[1, 3, 5], sums是[3, 7, 9] (例如7是1+3+3), 所以最后最大总体积/高度是 9+9+7=25吗?

一种可能的矩阵:
1 3 5
1 3 4
1 3 3
左视图:[5,4,3]
主视图:[1,3,5]

回复

使用道具 举报

🔗
水浅王八多 2017-11-24 09:26:43 | 只看该作者
全局:
mark一下,关注楼主后续
回复

使用道具 举报

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

本版积分规则

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