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

Drawbridge SDE/Hadoop 电面

🔗
pkk5488 2018-1-27 12:52:11 | 只看该作者
全局:
这题就是quantcast的OA,要求少了一点而已,本来应该用3小时写的,拿来面试有点过分了。。
回复

使用道具 举报

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

评分

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

查看全部评分

回复

使用道具 举报

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

使用道具 举报

🔗
chz 2018-1-28 04:19:42 | 只看该作者
全局:
请问楼主如何用递归得到这种mapping呢?
回复

使用道具 举报

🔗
golittleflag 2018-1-28 10:34:32 | 只看该作者
全局:
请问楼主 input 是一个JSON Format 的string 吗? 会不会有特殊case 例如key 给你"phoneNumber" 要输出哪一个?已加大米~祝offer多多
回复

使用道具 举报

🔗
 楼主| Spinoza 2018-1-28 12:56:26 | 只看该作者
全局:
好吧,我就再写一遍代码。以下是测试通过的。不过我按照面试中的输入格式,把JSON中的空格和换行都除去了。

  1. #include <iostream>
  2. #include <string>
  3. #include <unordered_set>
  4. #include <cctype>
  5. using namespace std;

  6. class Solution {
  7.     unordered_set<string> primaryKeys, secondaryKeys;
  8.     string primaryValue = "", secondaryValue = "";
  9.     int findMatchingBracket(string s, int pos, string brackets) {
  10.         int cnt = 0, n = s.length();
  11.         for (int j = pos; j < n; j++) {
  12.             if (s[j] == brackets[0]) cnt++;
  13.             if (s[j] == brackets[1]) cnt--;
  14.             if (cnt == 0) return j;
  15.         }
  16.     }
  17.     int findMatchingQuotation(string s, int pos) {
  18.         int n = s.length();
  19.         for (int j = pos + 1; j < n; j++)
  20.             if (s[j] == '"' && s[j - 1] != '\\') return j;
  21.     }
  22.     void findKey(string obj) {
  23.         int n = obj.length();
  24.         for (int i = 0; i < n; i++) {
  25.             if (obj[i] != '"') continue;
  26.             int endOfKey = findMatchingQuotation(obj, i);
  27.             int startOfValue = endOfKey + 2, endOfValue;
  28.             string key = obj.substr(i + 1, endOfKey - i - 1), value;

  29.             // value is an object
  30.             if (obj[startOfValue] == '{')
  31.                 endOfValue = findMatchingBracket(obj, startOfValue, "{}");
  32.             // value is an array
  33.             if (obj[startOfValue] == '[')
  34.                 endOfValue = findMatchingBracket(obj, startOfValue, "[]");
  35.             // value is a number
  36.             if (isdigit(obj[startOfValue]))
  37.                 endOfValue = obj.find_first_not_of("0123456789.", startOfValue + 1) - 1;
  38.             // value is a string
  39.             if (obj[startOfValue] == '"')
  40.                 endOfValue = findMatchingQuotation(obj, startOfValue);
  41.             value = obj.substr(startOfValue, endOfValue - startOfValue + 1);

  42.             if (primaryKeys.count(key)) {
  43.                 primaryValue = value;
  44.                 return;
  45.             }
  46.             if (secondaryValue == "" && secondaryKeys.count(key))
  47.                 secondaryValue = value;
  48.             if (value[0] == '{') findKey(value);
  49.             if (primaryValue != "") return;
  50.             i = endOfValue;
  51.         }
  52.     }
  53. public:
  54.     string getValue(string obj, unordered_set<string> primary, unordered_set<string> secondary) {
  55.         primaryKeys = primary;
  56.         secondaryKeys = secondary;
  57.         findKey(obj);
  58.         return primaryValue != "" ? primaryValue : secondaryValue;
  59.     }
  60. };

  61. int main() {
  62.     Solution sol;
  63.     string s = "{\"firstName\":\"John\",\"lastName\":\"Smith\",\"sex\":\"male\",\"age\":25,\"address\":{\"streetAddress\":\"212ndStreet\",\"city\":\"NewYork\",\"state\":\"NY\",\"postalCode\":\"10021\"},\"phoneNumber\":[{\"type\":\"home\",\"number\":\"212555-1234\"},{\"type\":\"fax\",\"number\":\"646555-4567\"}]}";
  64.     cout << sol.getValue(s, {"streetAddress"}, {"age"}) << endl;
  65.     return 0;
  66. }
复制代码

评分

参与人数 2大米 +6 收起 理由
jimmyalearner + 3 很有用的信息!
hn93hn + 3 给你点个赞!

查看全部评分

回复

使用道具 举报

🔗
 楼主| Spinoza 2018-1-28 12:57:16 | 只看该作者
全局:
pkk5488 发表于 2018-1-28 00:04
有点好奇就像这样给你一个JSON格式的string,应该怎么提取出这种mapping呢?就是具体代码大概是怎样实现 ...

我贴在16楼了。求加大米……

评分

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

查看全部评分

回复

使用道具 举报

🔗
 楼主| Spinoza 2018-1-28 12:57:38 | 只看该作者
全局:
chz 发表于 2018-1-28 04:19
请问楼主如何用递归得到这种mapping呢?

代码我贴在16楼了。求加大米……

评分

参与人数 1大米 +3 收起 理由
hn93hn + 3 论坛禁止拉群

查看全部评分

回复

使用道具 举报

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

评分

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

查看全部评分

回复

使用道具 举报

🔗
pkk5488 2018-1-29 00:25:55 | 只看该作者
全局:
Spinoza 发表于 2018-1-28 12:57
我贴在16楼了。求加大米……

感觉很强,学习了
回复

使用道具 举报

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

本版积分规则

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