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

狗家VO 大概率挂经

地里匿名用户
🔗
匿名用户-QSDWK  2022-5-19 10:06:59 来自APP
匿名用户 发表于 2022-05-18 09:09:05
请问第三轮follow up 猜的顺序是给定的还是需要自己找一个可能valid的顺序?
给定的szszsz
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QSDWK  2022-5-19 10:08:36 来自APP
jijismile 发表于 2022-05-18 09:45:25
第二题 是不是可以这样做 先算出来end time
然后 把start time 和-1 * endtime 放进一个sorted set 里面
还要把被测试的那个时间也放进去
是可以的,和用有效对接感觉差不多,jobs数量比较多的时候感觉时间会很长,面的L3没有sd
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QSDWK  2022-5-19 10:09:27 来自APP
yuxudong199 发表于 2022-05-18 11:10:02
感谢分享, 第二题follow up感觉可以这么搞:
TreeMap 存当前已有的job key = start Time, value = endTime + cpu needed for thi
感觉是可以的,python没有这个数据结构,就想到这个
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QSDWK  2022-5-19 10:11:14 来自APP
lihe14569 发表于 2022-05-18 14:34:34
第三轮的follow up肯否讲一下思路,是要求G的位置字母都包含,Y的位置上的字母要和前一个guess word一样吗??
要求G位置字母都相同,Y位置字母都包含,这样的话先check G的位置,然后Y的话就计数看是不是超过就行了
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QSNW1  2022-5-20 10:38:48
感谢楼主!请问第三轮follow up 能举个例子么?实在没明白啥意思
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QSDWK  2022-5-20 13:58:07 来自APP
匿名用户 发表于 2022-05-19 19:38:48
感谢楼主!请问第三轮follow up 能举个例子么?实在没明白啥意思
比如说我的target是ABCDE
我有一个guess word的序列,是AGHBD,那么第一步得到的结果就是GRRYY,下一步的话valid的guess就可以是比如ACBDG(G的位置必须index和值都还是原来的,所以第一个位置必须是A,Y的地方必需至少包含,所以必须包含BD),像AGHYU或者BDAHG就不行,给一个guess word的list,判断是不是每次猜测都是基于前一步的guess的valid guess
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-FMBO3  2022-5-21 06:54:59
匿名者 发表于 2022-5-19 22:58
比如说我的target是ABCDE
我有一个guess word的序列,是AGHBD,那么第一步得到的结果就是GRRYY,下一步的 ...

谢谢楼主解答!

这道题的解法是one pass O(n) 么? 只想到了two pass 的方法,不知道这道题应该怎么优化

follow up 感觉也是跟第一问没什么关系,问的是什么算法知识呢?
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-QSDWK  2022-5-21 09:11:03 来自APP
匿名用户 发表于 2022-05-20 15:54:59
谢谢楼主解答!

这道题的解法是one pass O(n) 么? 只想到了two pass 的方法,不知道这道题应该怎么优化
我的做法是two pass O(n)
第二次pass的时候因为最多只需要check英文字母所以是常数时间。
感觉没考啥难的算法……一个ordered set一个hash map就解决,主要是沟通理解题意和考虑corner cases?

评分

参与人数 1大米 +1 收起 理由
IrisWhx + 1 很有用的信息!

查看全部评分

回复

使用道具 举报

🔗
Falldawn 2022-5-24 01:32:02 | 只看该作者
全局:
本帖最后由 Falldawn 于 2022-5-23 11:02 编辑
匿名者 发表于 2022-5-20 18:11
我的做法是two pass O(n)
第二次pass的时候因为最多只需要check英文字母所以是常数时间。
感觉没考啥难的 ...

为啥需要2遍啊?遍历一次,相邻的比较就可以了啊 ,时间O(m * n) ,其实还是遍历2次……
  1. public boolean[] getHint(String secret, String guesses[]) {
  2.         Map<Character, Integer> h = new HashMap<>();
  3.         for (char s : secret.toCharArray()) {
  4.             h.put(s, h.getOrDefault(s, 0) + 1);
  5.         }

  6.         int m = guesses[0].length();
  7.         boolean[] res = new boolean[guesses.length];
  8.         for (int i = 1; i < guesses.length; i++) {
  9.             Set<Character> Y = new HashSet<>();
  10.             TreeSet<Integer> G = new TreeSet<>();
  11.             for (int idx = 0; idx < m; ++idx) {
  12.                 char ch = guesses[i - 1].charAt(idx);
  13.                 if (h.containsKey(ch)) {
  14.                     // corresponding characters match
  15.                     if (ch == secret.charAt(idx)) {
  16.                         G.add(idx);
  17.                         // corresponding characters don't match
  18.                     } else if (h.get(ch) > 0) {
  19.                         Y.add(ch);
  20.                     }
  21.                     // ch character was used
  22.                     h.put(ch, h.get(ch) - 1);
  23.                 }
  24.             }

  25.             Set<Character> curY = new HashSet<>();
  26.             String cur = guesses[i];
  27.             boolean isValidG = true;
  28.             for (int j: G) {
  29.                 if (cur.charAt(j) != secret.charAt(j)) {
  30.                     res[i] = false;
  31.                     isValidG = false;
  32.                     break;
  33.                 }
  34.             }

  35.             if (!isValidG) {
  36.                 continue;
  37.             }
  38.             for (int j = 0; j < n; j++) {
  39.                 if (G.contains(j)) {
  40.                     continue;
  41.                 }
  42.                 char c = cur.charAt(j);
  43.                 if (Y.contains(c)) {
  44.                     curY.add(c);
  45.                 }
  46.             }
  47.             if (curY.size() == Y.size()) {
  48.                 res[i] = true;
  49.             } else {
  50.                 res[i] = false;
  51.             }
  52.         }
  53.         res[0] = true;
  54.         return res;
  55.     }
复制代码
回复

使用道具 举报

地里匿名用户
🔗
匿名用户-NUREB  2022-5-24 10:24:38
dwl1222 发表于 2022-5-18 15:18
只check floor 和ceil可能不够。因为和新加入的ovelap的可以有很多。甚至所有当前的都可以与之overlap。  ...

最坏情况要都遍历,可以用tailSet找出所有endTime > new job's startTime,之后看是否overlap
回复

使用道具 举报

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

本版积分规则

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