avatar
两个P家电面面经# JobHunting - 待字闺中
p*8
1
P家指palantir, pocket gems,不管能不能过,应该不打算继续面了,刚面的面经
palentir:
1)warm-up: 给定一个array,如果有duplicate,返回true,否则,false
2)改进一:如果存在duplicate元素间index的距离不超过k,返回true,否则,false
比如a[1]=a[3]=3, k=2,那么3-1=2 <=2, 返回true
比如a[1]=a[3]=3, k=1,那么3-1=2 > 1, 继续找

我用了HashMap记录每个元素的index,如果第二次遇到,比较当前index和前面记录
的值,满足条件就返回true,否则继续找,空间>O(N),被问能不能优化空间,没想出来
,提示说只要记录k个数字就行了,于是我用了个linked hash map,超过k个,自动踢出
最老的,表示可以,但有点overkill了
3)改进二:如果存在两个元素间index的距离不超过k,差的绝对值不超过l,返回true
,否则, false
比如a[1]=2, a[3]=3, k=2,l=3, 那么3-1=2 <=2(k), 3-2 < 3(l)返回true
同理,如果l=0, 继续找
写了个O(K*N)的算法,表示认可,问能不能弄个更快的,我表示没想法,然后问了
几个问题就完了
pocket gems:
同glassdoor上基本一样
1)反转字符串
2)binary tree的LCA
3)10瓶药片,一瓶重量不一样,一个称,用最少次数找出那瓶异常的
改进:可能是1瓶不正常,可能是2瓶不正常,怎么找
我想了个,分成两组,没组5瓶,标上1,3,5,7,9 如果是超出部分是其中一个数字,
证明这组一瓶不正常(两个奇数的和为偶数,所以只可能是一瓶不正常),要撑两次,
如果大于这个数字,说明两瓶不正常,再撑一次,也要两次
希望有要面的同学可以参考下
avatar
p*2
2
多谢
avatar
c*t
3
多谢!bless!
2)改进一:如果存在duplicate元素间index的距离不超过k,返回true,否则,false
两个指针+hashmap 可以吧
3)改进二:如果存在两个元素间index的距离不超过k,差的绝对值不超过l,返回true
,否则, false
两个指针+BST+ current min variable,应该能O(nlgk),但是太难写codes了,看有没
有更好的解法。

false

【在 p*******8 的大作中提到】
: P家指palantir, pocket gems,不管能不能过,应该不打算继续面了,刚面的面经
: palentir:
: 1)warm-up: 给定一个array,如果有duplicate,返回true,否则,false
: 2)改进一:如果存在duplicate元素间index的距离不超过k,返回true,否则,false
: 比如a[1]=a[3]=3, k=2,那么3-1=2 <=2, 返回true
: 比如a[1]=a[3]=3, k=1,那么3-1=2 > 1, 继续找
:
: 我用了HashMap记录每个元素的index,如果第二次遇到,比较当前index和前面记录
: 的值,满足条件就返回true,否则继续找,空间>O(N),被问能不能优化空间,没想出来
: ,提示说只要记录k个数字就行了,于是我用了个linked hash map,超过k个,自动踢出

avatar
p*p
4
随便写了下,可能有bug
1.
bool checkDup(int *a, int n) {
unordered_set set;
for (int i = 0; i < n; ++i) {
if (set.find(a[i]) == set.end()) {
set.insert(a[i]);
}
else {
return true;
}
}
return false;
}
2.
bool checkDup(int *a, int n, int k) {
list kCont;
unordered_set set;
for (int i = 0; i < n; ++i) {
if (set.find(a[i]) == set.end()) {
if (kCont.size() == k) {
set.erase(kCont.front());
kCont.pop_front();
}
kCont.push_back(a[i]);
set.insert(a[i]);
}
else {
return true;
}
}
return false;
}
3没想出什么好想法

false

【在 p*******8 的大作中提到】
: P家指palantir, pocket gems,不管能不能过,应该不打算继续面了,刚面的面经
: palentir:
: 1)warm-up: 给定一个array,如果有duplicate,返回true,否则,false
: 2)改进一:如果存在duplicate元素间index的距离不超过k,返回true,否则,false
: 比如a[1]=a[3]=3, k=2,那么3-1=2 <=2, 返回true
: 比如a[1]=a[3]=3, k=1,那么3-1=2 > 1, 继续找
:
: 我用了HashMap记录每个元素的index,如果第二次遇到,比较当前index和前面记录
: 的值,满足条件就返回true,否则继续找,空间>O(N),被问能不能优化空间,没想出来
: ,提示说只要记录k个数字就行了,于是我用了个linked hash map,超过k个,自动踢出

avatar
h*i
5
那个不超过k的可以用heap达到O(Nlogk)

false

【在 p*******8 的大作中提到】
: P家指palantir, pocket gems,不管能不能过,应该不打算继续面了,刚面的面经
: palentir:
: 1)warm-up: 给定一个array,如果有duplicate,返回true,否则,false
: 2)改进一:如果存在duplicate元素间index的距离不超过k,返回true,否则,false
: 比如a[1]=a[3]=3, k=2,那么3-1=2 <=2, 返回true
: 比如a[1]=a[3]=3, k=1,那么3-1=2 > 1, 继续找
:
: 我用了HashMap记录每个元素的index,如果第二次遇到,比较当前index和前面记录
: 的值,满足条件就返回true,否则继续找,空间>O(N),被问能不能优化空间,没想出来
: ,提示说只要记录k个数字就行了,于是我用了个linked hash map,超过k个,自动踢出

avatar
x*0
6
mark
avatar
d*u
7
warm-up那题元素最大值是多少?如果小于n,有O(n)算法。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。