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

Palantir onsite被虐记

全局:

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

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
今天去NYC的office面试,中午先一起和他们吃饭,一个白人小哥接待我。小哥貌似不善言谈,me too,所以略微尴尬,问了一堆问题,然后他没事还老盯着我。。。。实在是。。

四轮面试,每轮一个小时。
第一轮,求一个string list的每个string对应的unique
您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
使用VIP即刻解锁阅读权限或查看其他获取积分的方式
游客,您好!
本帖隐藏的内容需要积分高于 188 才可浏览
您当前积分为 0。
VIP即刻解锁阅读权限查看其他获取积分的方式
Unlock interview details and practice with AI
Curated Interview Questions from Top Companies
demo的时候看了下感觉就是个网页版的word,能够满足不同的数据显示的要求。
工作环境很好,很轻松,午饭也不错,吃喝免费。
找实习差不多了,从了amazon。。也祝大家好运:)

评分

参与人数 5大米 +72 收起 理由
西风吹草 + 3 感谢分享!
robend + 60
b232126660 + 1 感谢分享!
eval + 3 感谢分享!
shawlin + 5 感谢分享!

查看全部评分


上一篇:Google电面-刚刚挂电话就来写面经
下一篇:Liveramp onsite
推荐
zlxwd 2015-3-24 22:34:51 | 只看该作者
全局:
robinho364 发表于 2015-3-24 14:24
Hi,我似乎找到一个讨论贴:

https://www.ocf.berkeley.edu/~wwu/cgi-bin/yabb/YaBB.cgi?board=riddle ...

昨天想复杂了,在不改变顺序的前提下也可以达到N^2。
  1. import java.util.HashMap;
  2. import java.util.Map;

  3. public class Test {

  4.     private static int maxLen;

  5.     private static void update(Map<Integer, Integer> dp, int diff, int len) {
  6.         if (!dp.containsKey(diff) || dp.get(diff) < len) {
  7.             dp.put(diff, len);
  8.             maxLen = Math.max(maxLen, len);
  9.         }
  10.     }

  11.     private static int solve(int[] input) {
  12.         if (input == null) {
  13.             return 0;
  14.         } else if (input.length <= 2) {
  15.             return input.length;
  16.         }

  17.         maxLen = 0;

  18.         int N = input.length;
  19.         Map<Integer, Map<Integer, Integer>> dp = new HashMap<Integer, Map<Integer, Integer>>();
  20.         for (int i = 0; i < N; ++i) {
  21.             dp.put(i, new HashMap<Integer, Integer>());
  22.         }
  23.         for (int i = 1; i < N; ++i) {
  24.             for (int j = 0; j < i; ++j) {
  25.                 int diff = input[i] - input[j];
  26.                 if (dp.get(j).containsKey(diff)) {
  27.                     update(dp.get(i), diff, dp.get(j).get(diff) + 1);
  28.                 } else {
  29.                     update(dp.get(i), diff, 2);
  30.                 }
  31.             }
  32.         }

  33.         return maxLen;
  34.     }

  35.     public static void main(String[] args) {
  36.         int[] arr = new int[] { 1, 3, 5, 10, 10, 7, 2, 4, 1, -2 };
  37.         System.out.println(solve(arr));
  38.     }
  39. }
复制代码
回复

使用道具 举报

推荐
robinho364 2015-3-24 13:45:08 | 只看该作者
全局:
zlxwd 发表于 2015-3-24 12:46
3(1) 记录前两个数字的差,以及到上一个数字为止的最长等差数列。单遍扫描。
(2) DP, dp[j]为最后两个数字 ...

为什么要记录最后两个数字呢?

我只要记录两个数字的差不就可以了吗?

CASES:

8
1 3 5 2 3 5 7 8
8
1 5 4 3 2 1 0 2
8
9 4 12 15 3 2 1 8
8
1 2 4 3 6 8 9 10
8
1 1 1 1 1 1 1 1
15
1 3 5 3 17 2 38 310 3 4 3 5 6 2 3
  1. #define _USE_MATH_DEFINES

  2. #ifdef ONLINE_JUDGE
  3. #define FINPUT(file) 0
  4. #define FOUTPUT(file) 0
  5. #else
  6. #define FINPUT(file) freopen(file,"r",stdin)
  7. #define FOUTPUT(file) freopen(file,"w",stdout)
  8. #endif

  9. #include <iostream>
  10. #include <cstdio>
  11. #include <cstring>
  12. #include <cstdlib>
  13. #include <cmath>
  14. #include <ctime>
  15. #include <set>
  16. #include <stack>
  17. #include <string>
  18. #include <map>
  19. #include <vector>
  20. #include <queue>
  21. #include <algorithm>
  22. #include <functional>
  23. #include <bitset>

  24. typedef long long ll;
  25. typedef long double ld;
  26. static const int N = 110;
  27. static const int M = 2010;
  28. static const int LEN = 50;
  29. static const int MAX = 0x7fffffff;
  30. static const int GMAX = 0x3f3f3f3f;
  31. static const ll LGMAX = 0x3f3f3f3f3f3f3f3f;
  32. static const int MIN = ~MAX;
  33. static const double EPS = 1e-9;
  34. static const ll BASE = 1000000007;
  35. static const int CH = 258;

  36. int arr[N];
  37. int dp[N][M];

  38. void solve(int n)
  39. {
  40.     int ans = -1;
  41.     for (int i = 0; i < n; ++i) {
  42.         for (int j = 0; j < i; ++j) {
  43.             dp[i][arr[i] - arr[j] + 1000] = std::max(dp[i][arr[i] - arr[j] + 1000],
  44.                                               dp[j][arr[i] - arr[j] + 1000] + 1);
  45.             ans = std::max(ans,dp[i][arr[i] - arr[j] + 1000]);
  46.         }

  47.     }
  48.     printf("%d\n", ans + 1);

  49.     memset(dp, 0, sizeof(dp));
  50. }

  51. int main()
  52. {
  53.     FINPUT("in.txt");
  54.     FOUTPUT("out.txt");

  55.     int n;
  56.     while (scanf("%d", &n) != EOF) {
  57.         for (int i = 0; i < n; ++i) {
  58.             scanf("%d", &arr[i]);
  59.         }

  60.         solve(n);
  61.     }

  62.     return 0;
  63. }
复制代码
回复

使用道具 举报

推荐
robinho364 2015-3-25 10:19:41 | 只看该作者
全局:
shawlin 发表于 2015-3-25 04:55
能否说一下第三题的思路呢?

思路在之前的帖子里哈。

Hi,我似乎找到一个讨论贴:

https://www.ocf.berkeley.edu/~ww ... play;num=1247162214

我的方法有局限性,如果两个数字之差太大,就会有问题,等于是要hash。帖子里TenaliRaman的方法不会有问题,因为他只是不断的找a+b = 2b里的b。

我整理一下思路:

这题本意上是要求我们找到任意的indices,要求i0<i1<ik。
如果不局限于i0<i1...<ik,那也可以用TenaliRaman的方法,但是用我的方法就不对了。我的方法本质上等同于miletus的方法。

因此,我们在不局限于i0<i1...<ik,可以用TenaliRaman的dynamic programming方法达到O(n^2)的复杂度,并且没有存储空间的限制。

这里还有一篇Jeff的分析:

http://web.engr.illinois.edu/~jeffe/pubs/pdf/arith.pdf


就是说这题有两种形式,一种是在序列里找等差数列——不可以打乱顺序,一种是在集合里找等差数列——可以打乱顺序。两者都是不连续的。

hash的方法。也就是我的方法,前面那位同学也是hash的方法。也就是说用dp[i][j],代表第i位的时候,相差为j的数的最长个数。

但是hash的限制就是两个数可能相差太大,数字可能很多。所以这题其实可以不用hash。在jeff的论文里详细阐明了这个思想。等差数列a_i+a_j=2b一定是个固定数字,那么我们从这个性质出发,可以找最长的序列。首先排序,每次假设a_i=b,如果a_(i) - a_(k)> a_(j) - a_(i),那么需要将index j增大;反过来将index k减小。如果是=,那么正好找到一组对称,dp[k][i] = dp[i][j] + 1,其中dp[k][i],代表这个等差数列的前两个数字分别为index k和index i。总的来说这种解法还是非常巧妙的,里面有一些细节。

具体的证明可以仔细参考jeff的论文。

补充内容 (2015-3-25 10:22):
公式被吞了。
dp[k][i] = dp[i][j] + 1,其中dp[k][i],代表这个等差数列的前两个数字分别为index k和index i。

补充内容 (2015-3-25 10:23):
貌似打不出来二维的……
dp[k] [i] = dp[i] [j] + 1,其中dp[k] [i],代表这个等差数列的前两个数字分别为index k和index i。

补充内容 (2015-3-25 10:23):
醉了
dp[k, i] = dp [i, j] + 1,其中dp[k, i] ,代表这个等差数列的前两个数字分别为index k和index i。
回复

使用道具 举报

🔗
旋转时空 2015-3-24 09:47:54 | 只看该作者
全局:
我也是今天去面的!
看好多会议室里都是面试。。。说不定擦肩而过啊~~~
都没给我show demo。。。直接问我拿product能做什么也是跪了。。。
不知道是不是ft的原因,非Dev的流程貌似更麻烦。。HR说我即使通过这个onsite起码还有两轮QAQ
回复

使用道具 举报

🔗
 楼主| cjqhenry 2015-3-24 09:51:19 | 只看该作者
全局:
旋转时空 发表于 2015-3-24 09:47
我也是今天去面的!
看好多会议室里都是面试。。。说不定擦肩而过啊~~~
都没给我show demo。 ...

确实面试的挺多,你还有机会,good luck
回复

使用道具 举报

🔗
zlxwd 2015-3-24 12:46:57 | 只看该作者
全局:
3(1) 记录前两个数字的差,以及到上一个数字为止的最长等差数列。单遍扫描。
(2) DP, dp[i][j]为最后两个数字为X(i)和X(j)的等差数列最大长度,O(N^3),不知道能不能优化到N^2?
4. float类型可以对所有端点排序,然后把float值按照大小转为整数1,2,3,4...,然后套用follow up之前的思路。
回复

使用道具 举报

🔗
robinho364 2015-3-24 14:24:30 | 只看该作者
全局:
zlxwd 发表于 2015-3-24 12:46
3(1) 记录前两个数字的差,以及到上一个数字为止的最长等差数列。单遍扫描。
(2) DP, dp[j]为最后两个数字 ...

Hi,我似乎找到一个讨论贴:

https://www.ocf.berkeley.edu/~ww ... play;num=1247162214

我的方法有局限性,如果两个数字之差太大,就会有问题,等于是要hash。帖子里TenaliRaman的方法不会有问题,因为他只是不断的找a+b = 2b里的b。

我整理一下思路:

这题本意上是要求我们找到任意的indices,要求i0<i1<ik。
如果不局限于i0<i1...<ik,那也可以用TenaliRaman的方法,但是用我的方法就不对了。我的方法本质上等同于miletus的方法。

因此,我们在不局限于i0<i1...<ik,可以用TenaliRaman的dynamic programming方法达到O(n^2)的复杂度,并且没有存储空间的限制。

这里还有一篇Jeff的分析:

http://web.engr.illinois.edu/~jeffe/pubs/pdf/arith.pdf
回复

使用道具 举报

🔗
robinho364 2015-3-24 14:26:36 | 只看该作者
全局:
zlxwd 发表于 2015-3-24 12:46
3(1) 记录前两个数字的差,以及到上一个数字为止的最长等差数列。单遍扫描。
(2) DP, dp[j]为最后两个数字 ...

抱歉哈,之前理解错你的意思了,O(n^2)的解法在上面的链接帖子里哈。
回复

使用道具 举报

🔗
giddens9527 2015-3-25 04:30:20 | 只看该作者
全局:
我是上周四面的 到现在都没收到结果。。。
回复

使用道具 举报

🔗
shawlin 2015-3-25 04:55:16 | 只看该作者
全局:
robinho364 发表于 2015-3-24 01:26
抱歉哈,之前理解错你的意思了,O(n^2)的解法在上面的链接帖子里哈。

能否说一下第三题的思路呢?
回复

使用道具 举报

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

本版积分规则

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