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

Google Intern 电面 10/3

🔗
kin332026 2016-10-31 13:55:01 | 只看该作者
全局:
请问楼主第一轮第三题是怎么做的呢
回复

使用道具 举报

🔗
syjohnson 2016-11-1 00:40:59 | 只看该作者
全局:
kin332026 发表于 2016-10-31 13:55
请问楼主第一轮第三题是怎么做的呢

假设一定有解的情况下,可以看成一个贪心问题,"aaaabbbccd" 每次从string的第1位开始check s.charAt(i) != s.charAt(i - 1), 如果找到相等的就从后面抓一个和s.charAt(i - 1)不等的swap一下,prev = i - 1, 此时s.substring(0, prev +1)就满足条件,后面的递归处理就好,所以时间复杂度是O(N)
  1. public static String nextNonRepeatPermutation(String s){
  2.       if(s == null || s.length() < 2) return s;
  3.       int i = 1;
  4.       while(i < s.length() && s.charAt(i) != s.charAt(i - 1)){
  5.         i++;
  6.       }
  7.       if(i == s.length()) {
  8.         return s;
  9.       }else{
  10.         char prev = s.charAt(i);
  11.         int from = i;
  12.         while(i < s.length() && s.charAt(i) == prev){
  13.           i++;
  14.         }
  15.         s = swap(s, from, i);
  16.         return s.substring(0, from) + nextNonRepeatPermutation(s.substring(from));
  17.       }
  18.     }
  19.     public static String swap(String s, int from ,int to){
  20.       if(s == null || from < 0 || to >= s.length()) return s;
  21.       char[] arr = s.toCharArray();
  22.       char tmp = arr[from];
  23.       arr[from]= arr[to];
  24.       arr[to]= tmp;

  25.       return new String(arr);
  26.     }
复制代码

补充内容 (2016-11-1 00:52):
感觉还是用堆实现起来最简单确保正确:
把字符出现频率统计出来,扔在一个堆里。每次取出前两个频率高的字母,配成一对,次数减一,扔回堆。
回复

使用道具 举报

🔗
syjohnson 2016-11-1 00:45:13 | 只看该作者
全局:
syjohnson 发表于 2016-11-1 00:40
假设一定有解的情况下,可以看成一个贪心问题,"aaaabbbccd" 每次从string的第1位开始check s.charAt(i)  ...

不好意思,这个代码"aaabbbccc"时有bug
回复

使用道具 举报

🔗
sccnju 2016-11-1 08:55:47 | 只看该作者
全局:
想问下楼主,第一轮第一题是什么个思路啊,是类似leetcode上 find peak element那一套题吗?假定edge之后再二分法?

谢啦。
回复

使用道具 举报

🔗
MicX 2016-11-2 08:05:40 | 只看该作者
全局:
syjohnson 发表于 2016-10-31 09:34
个人觉得第二轮第二题既然说到内存放不下了,面试官是想听你说external sort吧?另外minHeap也是O(N)

minheap O(N) 应该需要fibonacci heap做到插入O(1)?求问external sort具体?
回复

使用道具 举报

🔗
syjohnson 2016-11-3 07:19:10 | 只看该作者
全局:
MicX 发表于 2016-11-2 08:05
minheap O(N) 应该需要fibonacci heap做到插入O(1)?求问external sort具体?

正常heap建树就是O(N)啊, wiki external sort讲的就很好
回复

使用道具 举报

🔗
MicX 2016-11-3 07:26:21 | 只看该作者
全局:
syjohnson 发表于 2016-11-3 07:19
正常heap建树就是O(N)啊, wiki external sort讲的就很好

维护的时候不是要不停insert吗?
回复

使用道具 举报

🔗
MicX 2016-11-3 07:28:33 | 只看该作者
全局:
syjohnson 发表于 2016-11-3 07:19
正常heap建树就是O(N)啊, wiki external sort讲的就很好

以及怎么heap啊?我有看到说分成小包每个都建个k大小的heap,再merge。可是觉得比如包1的k+1和包2的k+1...加在一起比其他大呢?还是说分包的时候保证了数据在不同的包里不会重复?
回复

使用道具 举报

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

本版积分规则

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