没结婚也能买房啊!大波士顿地区买房小tips

一亩三分地论坛

 找回密码
 Sign Up 注册获取更多干货
码农求职神器Triplebyte:
不用海投,内推多家公司面试
[Google级团队]:实时大数据分析领域践行者
北京/深圳-大数据/搜索/机器学习职位
日志易机器大数据行业践行者Web/大数据/机器学习等职位-北京or深圳
把贵司招聘信息放这里
查看: 1996|回复: 21
收起左侧

nest 电面

[复制链接] |试试Instant~ |关注本帖
documentary1 发表于 2017-7-12 05:09:28 | 显示全部楼层 |阅读模式

2017(7-9月) 码农类 硕士 全职@Google - 内推 - 技术电面  | Other | 在职跳槽

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

您需要 登录 才可以下载或查看,没有帐号?Sign Up 注册获取更多干货

x
Write a function.
Input: int[] that is sorted
Output: A int value from the int[]. Where the value occurs in the array at least (length of array / 4) times
Example: [1, 2, 3, 4, 1, 6, 7, 2]. Length of array is 8. 8/4 = 2. Return item that occurs at least 2 times. Return value 1 or 2.

if sorted
要求不断优化,o(n) space o(n) time -> o(1) space o(n) time -> o(1) space o(logn) time

. 1point 3acres 璁哄潧

评分

1

查看全部评分

codemonk 发表于 2017-8-24 14:13:39 | 显示全部楼层
  1. // O(k*N) time, O(k) space, here k = 4-google 1point3acres
  2. vector<int> majorityElements(vector<int>& nums, int k = 4) {
  3.     int n = nums.size();
  4.     vector<int> ans;
  5.     vector<int> cand(k, 0), freq(k, 0);
  6.     iota(cand.begin(), cand.end(), 0);
    .鐣欏璁哄潧-涓浜-涓夊垎鍦
  7.     for(int num : nums) {
  8.         bool match = false; // check if there is a match with existing candidate
  9.         for(int i = 0; i < k; i++) {
  10.             if(num == cand[i]) {
  11.                 freq[i]++;
  12.                 match = true;
  13.                 break;
  14.             }
  15.         }
  16.         if(!match) { // no match with existing candidate
  17.             for(int i = 0; i < k; i++) {
  18.                 if(freq[i] == 0) { // we can replace with num a candidate with freq = 0
  19.                     freq[i] = 1;.鏈枃鍘熷垱鑷1point3acres璁哄潧
  20.                     cand[i] = num;. from: 1point3acres.com/bbs
  21.                     break;
  22.                 }
  23.                 if(i == k) { // no match and no replacement
  24.                     for(int i = 0; i < k; i++) freq[i]--; // freq[] all reduce by 1
  25.                 }. more info on 1point3acres.com
  26.             }
  27.         }
  28.     }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  29.     for(int c : cand) {
  30.         if(count(nums.begin(), nums.end(), c) >= ceil(n/4)). from: 1point3acres.com/bbs
  31.             ans.push_back(c); // if c is with freq > n/4;
  32.     }
  33.     return ans;
  34. }. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  35. . 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
  36. // O(logN) time, O(1) space
  37. // only need to check if nums at indices n/4-1, 2*n/4-1, 3*n/4-1, n-1 are qualified candidate.
  38. vector<int> majorityElementsBinarySearch(vector<int>& nums) {
  39.     unordered_set<int> cand;
  40.     int n = nums.size();
  41.     cand.insert(nums[n/4-1]);
  42.     cand.insert(nums[2*n/4-1]);
  43.     cand.insert(nums[3*n/4-1]);
  44.     cand.insert(nums[n-1]);. from: 1point3acres.com/bbs
  45.     vector<int> ans;
  46.     for(int c : cand) {-google 1point3acres
  47.         int range = upper_bound(nums.begin(), nums.end(), c) - lower_bound(nums.begin(), nums.end(), c);
  48.         if(range >= n/4) ans.push_back(c);
  49.     }
  50.     return ans;
  51. }

  52. int main(int argc, const char * argv[]) {
  53.     // insert code here...
  54.     vector<int> nums1 = {1,1,2,2,3,3,4,4};
  55.     auto ans = majorityElements(nums1);
  56.     for(int i : ans) cout << i << " ";
  57.     cout << endl;
  58.     . From 1point 3acres bbs
  59.     vector<int> nums2 = vector<int>({0,1,1,1,2,2,3,3,3,4,4,5});
  60.     ans = majorityElements(nums2);. from: 1point3acres.com/bbs
  61.     for(int i : ans) cout << i << " ";
  62.     cout << endl;
  63.    
  64.     ans = majorityElementsBinarySearch(nums1);
  65.     for(int i : ans) cout << i << " ";. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
  66.     cout << endl;
  67.    
    . From 1point 3acres bbs
  68.     ans = majorityElementsBinarySearch(nums2);. 鍥磋鎴戜滑@1point 3 acres
  69.     for(int i : ans) cout << i << " ";
  70.     cout << endl;
  71.     return 0;
  72. }
复制代码
回复 支持 2 反对 0

使用道具 举报

say543 发表于 2017-7-12 13:35:46 | 显示全部楼层
楼主能问下logn 怎么解吗 感觉二分查找 也是要o(nlogn)?
回复 支持 1 反对 0

使用道具 举报

2011051305 发表于 2017-7-14 23:57:10 | 显示全部楼层
rgc588 发表于 2017-7-14 11:31
舍弃的逻辑是什么? 还是没想出来

我想是二分的话 一定有一半不合要求的嘛  题主的题意是sorted array的 所以一次二分就是O(logn)  像merge sort这种最终要对所有array element做处理的 才是O(nlogn)

如果说错了求批判~~
回复 支持 1 反对 0

使用道具 举报

Timothy1119 发表于 2017-7-12 05:34:50 | 显示全部楼层
非常感谢分享!能具体说一下优化的过程吗?是针对sorted array进行优化吗?最后怎么做到logn的时间的?
回复 支持 反对

使用道具 举报

2011051305 发表于 2017-7-12 06:06:21 | 显示全部楼层
是肯定给定了sorted了吗? o(n) space o(n) time 用Hashmap扫一遍计数 ->  o(1) space o(n) time 用一个int记录当前指针 然后双指针扫一遍 -> 用二分查找 mid的左边右边分别查看 因为只要返回value就好无所谓index ? 这个思路是对的么?
回复 支持 反对

使用道具 举报

星焦不变 发表于 2017-7-12 06:42:28 | 显示全部楼层
请问楼主申请的是什么岗位啊?
回复 支持 反对

使用道具 举报

rainbow767 发表于 2017-7-12 08:59:05 | 显示全部楼层
2011051305 发表于 2017-7-11 14:06. visit 1point3acres.com for more.
是肯定给定了sorted了吗? o(n) space o(n) time 用Hashmap扫一遍计数 ->  o(1) space o(n) time 用一个int ...
. from: 1point3acres.com/bbs
用二分查找 mid的左边右边分别查看 因为只要返回value就好无所谓index?这个我不太理解。能讲讲是什么意思吗?为何要看mid啊?
回复 支持 反对

使用道具 举报

FightForTomo 发表于 2017-7-12 13:54:14 | 显示全部楼层
say543 发表于 2017-7-12 13:35
楼主能问下logn 怎么解吗 感觉二分查找 也是要o(nlogn)?

二分查找要是都nlgn了,直接遍历不就行了。
回复 支持 反对

使用道具 举报

FightForTomo 发表于 2017-7-12 13:57:43 | 显示全部楼层
不是说好input 是排序的了么。
例子咋又乱序了?
. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
我觉得就直接遍历,然后maintain 一个counter.
返回最常出现的数字就可以了。. from: 1point3acres.com/bbs
时间O(n), 空间O(1)。
回复 支持 反对

使用道具 举报

rgc588 发表于 2017-7-14 02:37:11 | 显示全部楼层
2011051305 发表于 2017-7-12 06:06
是肯定给定了sorted了吗? o(n) space o(n) time 用Hashmap扫一遍计数 ->  o(1) space o(n) time 用一个int ...

如果两边都找那不是logN 只搜索一边才是logN
回复 支持 反对

使用道具 举报

2011051305 发表于 2017-7-14 03:50:53 | 显示全部楼层
rgc588 发表于 2017-7-14 02:37
如果两边都找那不是logN 只搜索一边才是logN
. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
恩我是想说  如果二分+左右探查 其实可能会退化成O(n)的 所以应该是一次二分才能做到O(logn)  注意上面同学说的二分查找也是要O(nlogn) 其实是不准确的 因为这里是sorted 所以每次都一定能舍弃一半 。   (说错了大家请指正!~). 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

回复 支持 反对

使用道具 举报

rgc588 发表于 2017-7-14 11:31:05 | 显示全部楼层
2011051305 发表于 2017-7-14 03:50. 鐗涗汉浜戦泦,涓浜╀笁鍒嗗湴
恩我是想说  如果二分+左右探查 其实可能会退化成O(n)的 所以应该是一次二分才能做到O(logn)  注意上面同 ...

舍弃的逻辑是什么? 还是没想出来
回复 支持 反对

使用道具 举报

xjob2017spring 发表于 2017-7-14 13:06:11 | 显示全部楼层
路过问一下nest和g招人是互相独立的吗
回复 支持 反对

使用道具 举报

sjtuenergy 发表于 2017-7-17 11:36:07 | 显示全部楼层
楼主收到onsite通知了吗? thanks
回复 支持 反对

使用道具 举报

f1371342385 发表于 2017-7-23 07:04:36 | 显示全部楼层
2011051305 发表于 2017-7-14 23:57. Waral 鍗氬鏈夋洿澶氭枃绔,
我想是二分的话 一定有一半不合要求的嘛  题主的题意是sorted array的 所以一次二分就是O(logn)  像merge ...

求问这个舍弃的逻辑是什么?没太想明白
回复 支持 反对

使用道具 举报

mchzh 发表于 2017-7-26 13:30:33 | 显示全部楼层
除了做题还问别的问题吗?楼主得到onsite了吗?
回复 支持 反对

使用道具 举报

linixtest 发表于 2017-8-26 07:56:00 | 显示全部楼层
把array切成四等份,看某一个区间里面最前面和最后面的数字是不是相等?. visit 1point3acres.com for more.

补充内容 (2017-8-26 08:00):
. 鍥磋鎴戜滑@1point 3 acres没有的话再移除1.3的那两刀,看看中间有没有。如果还没有就移除最中间的那一刀,看看中间有没有。
回复 支持 反对

使用道具 举报

JYstephen 发表于 2018-3-26 19:55:02 | 显示全部楼层

logn的算法没看明白,能不能麻烦解释一下呢?
回复 支持 反对

使用道具 举报

treeguard 发表于 2018-4-5 00:51:02 | 显示全部楼层
majority element II
回复 支持 反对

使用道具 举报

本版积分规则

提醒:发帖可以选择内容隐藏,部分板块支持匿名发帖。请认真读完以下全部说明:

■隐藏内容方法: [hide=200]你想要隐藏的内容比如面经[/hide]
■意思是:用户积分低于200则看不到被隐藏的内容
■可以自行设置积分值,不建议太高(200以上太多人看不到),也不建议太低(那就没必要隐藏了)
■建议只隐藏关键内容,比如具体的面试题目、涉及隐私的信息,大部分内容没必要隐藏。
■微信/QQ/电子邮件等,为防止将来被骚扰甚至人肉,以论坛私信方式发给对方最安全。
■匿名发帖的板块和方法:http://www.1point3acres.com/bbs/thread-388663-1-1.html

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明

custom counter

GMT+8, 2018-4-21 04:10

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

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