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

Google interview

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

使用道具 举报

🔗
monkerek 2015-7-29 10:17:56 | 只看该作者
全局:
zhaishaodan 发表于 2015-6-15 01:45
用两个map, 一个maps word to count, 另一个maps count to word集合。
worst case: insert O(logn), getT ...

用map的实质是在用红黑树    你的时间复杂度计算是错的
回复

使用道具 举报

🔗
zhouyoung1124 2015-7-29 10:33:43 | 只看该作者
全局:
HashMap< String , Integer > + MinHeap
回复

使用道具 举报

🔗
milanelllo13 2015-7-30 11:19:43 | 只看该作者
全局:
请问一下是说 全部insert了 再求topK吗!
回复

使用道具 举报

🔗
 楼主| love1point 2015-7-31 00:07:18 | 只看该作者
全局:
milanelllo13 发表于 2015-7-30 11:19
请问一下是说 全部insert了 再求topK吗!

Yes. They already insert all, then we get topk
回复

使用道具 举报

🔗
swee 2015-8-3 06:26:50 | 只看该作者
全局:
分享一下我的思路哈 :)
  1. #include <iostream>
  2. #include <sstream>
  3. #include <unordered_map>
  4. #include <vector>
  5. #include <algorithm>

  6. bool comparator (const std::unordered_map<std::string,int>::iterator &lhs,
  7.                  const std::unordered_map<std::string,int>::iterator &rhs) {
  8.   return lhs->second < rhs->second;
  9. };

  10. int main() {

  11.   std::unordered_map<std::string,int> word2Freq;
  12.   std::vector<std::unordered_map<std::string,int>::iterator> maxFreqHeap;

  13.   std::string line = "a a a b c d d d d";
  14.   std::cout << "input string = " << line << std::endl;

  15.   std::istringstream iss(line);
  16.   std::string wd;
  17.   while (iss >> wd) {
  18.     std::unordered_map<std::string,int>::iterator it = word2Freq.find(wd);
  19.     if (it == word2Freq.end()) {
  20.       word2Freq[wd] = 1;
  21.       maxFreqHeap.push_back(word2Freq.find(wd));
  22.       std::push_heap(maxFreqHeap.begin(),maxFreqHeap.end(),comparator);
  23.     } else {
  24.       word2Freq[wd]++;
  25.       std::make_heap(maxFreqHeap.begin(),maxFreqHeap.end(),comparator);
  26.     }
  27.   }

  28.   int k = 2;
  29.   std::cout << "max k = " << k << std::endl;

  30.   while (!maxFreqHeap.empty() && k-- > 0) {
  31.     std::cout << maxFreqHeap.front()->first << std::endl;
  32.     std::pop_heap(maxFreqHeap.begin(),maxFreqHeap.end(),comparator);
  33.     maxFreqHeap.pop_back();
  34.   }

  35.   return 0;
  36. }
复制代码
回复

使用道具 举报

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

使用道具 举报

🔗
SDU_Phonism 2015-8-30 02:07:30 | 只看该作者
全局:
lxia 发表于 2015-8-5 16:20
为什么不能用两个hashmap?
map m1 寸string出现次数。
map  m2存 出现某个次数的string列表

我也是这么做的。分享一下我的代码吧。
  1. class Name implements Comparable<Name> {
  2.         String name;
  3.         int fre;

  4.         public Name(String str, int val) {
  5.             name = str;
  6.             fre = val;
  7.         }

  8.         public int compareTo(Name e1) {
  9.             if (e1.fre == this.fre) {
  10.                 return e1.name.compareTo(this.name);
  11.             }
  12.             return e1.fre - this.fre;
  13.         }
  14.     }

  15.     public static TreeSet<Name> set = new TreeSet<Name>();
  16.     public static HashMap<String, Integer> map = new HashMap<String, Integer>(1000);

  17.     public void init(String[] name) {
  18.         for (String str: name) {
  19.             if (map.containsKey(str)) {
  20.                 map.put(str, map.get(str) + 1);
  21.             } else {
  22.                 map.put(str, 1);
  23.             }
  24.         }

  25.         for (String str: map.keySet()) {
  26.             Name e1 = new Name(str, map.get(str));
  27.             set.add(e1);
  28.         }

  29.     }

  30.     public void insert(String query) {
  31.         if (map.containsKey(query)) {
  32.             set.remove(new Name(query, map.get(query)));
  33.             map.put(query, map.get(query) + 1);
  34.             Name e1 = new Name(query, map.get(query));
  35.             set.add(e1);
  36.         } else {
  37.             map.put(query, 1);
  38.             Name e1 = new Name(query, 1);
  39.             set.add(e1);
  40.         }
  41.     }

  42.     public void topK(int k) {
  43.         for (Name e: set) {
  44.             if (k > 0) {
  45.                 System.out.print(e.name + " ");
  46.                 k -= 1;
  47.             }
  48.         }
  49.         System.out.println();
  50.     }
复制代码
回复

使用道具 举报

🔗
sevengram 2015-10-27 15:34:03 | 只看该作者
全局:
核心问题就是在一个无序数组里找topK的那些元素,最佳解法应该是quick select,O(n)时间
回复

使用道具 举报

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

本版积分规则

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