由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - a[i] + b[j] = c[k] 的题有靠谱的答案不?
相关主题
[算法] unsorted array[合集] Google电话面试题目
Google电话面试题目一个小公司面经
请教一道题目这题怎么做?
问一道在sorted array里search的问题问一道老题
问个面试题请教个面试题
find median for k sorted arrays发道题吧
merge k个数组怎样的方法好?HashTable space complexity?
求这道题的O(N)解 (转载)面试题求解:remove first duplicate number from an array
相关话题的讨论汇总
话题: integer话题: hashset话题: else话题: return话题: int
进入JobHunting版参与讨论
1 (共1页)
l********r
发帖数: 140
1
Given 3 sorted arrays, array a, array b, array c. find all pairs where a[i]
+ b[j] = c[k].
We can convert it to 3SUM for a nxn solution, but that doesn't used the "
sorted" property.
x****g
发帖数: 1512
2
参考这个http://www.mitbbs.com/article_t/JobHunting/32619751.html
我觉得矩阵的思路正确可以做到n*log(n)
r****c
发帖数: 2585
3
怎么可能nlogn
可以有O(n^2)组解
x****g
发帖数: 1512
4
排序数组本身无dup?

【在 r****c 的大作中提到】
: 怎么可能nlogn
: 可以有O(n^2)组解

e***s
发帖数: 799
5
这题用两个hash应该可以O(max(m,n) + l),m, n, l分别是a, b, c的长度。
x****g
发帖数: 1512
6
展开说说,表示不解. hash求和的新思路也有兴趣学习,呵呵。
最差怎么都是o(n^2)
即使每个都无dup,像
A=1,2,3,4,5...n
B=n,n-1,....1
C=n+1,n+2......n+n
那么n+1就有n对
n+2就n-1对
...n+n就1对
计算n(n+1)/2.....

【在 e***s 的大作中提到】
: 这题用两个hash应该可以O(max(m,n) + l),m, n, l分别是a, b, c的长度。
e***s
发帖数: 799
7
之前看错题了,以为返回是否存在a[i] + b[j] = c[k]
但是复杂度是一样的。
public static boolean another3Sum(int[] A, int[] B, int[] C){
HashSet ha = new HashSet();
HashSet hb = new HashSet();
int i = 0, j = 0;
for(int k = 0; k < C.length; k++){
if(i < A.length && j < B.length){
if(A[i] + B[j] > C[k]){
if(ha.contains(C[k] - B[j]) || hb.contains(C[k] - A[i]))
return true;
}
else if (A[i] + B[j] < C[k]){
ha.add(A[i++]);
hb.add(B[j++]);
k--;
}
else return true;
} else if(i >= A.length){
if(ha.contains(C[k] - B[j])) return true;
else{
hb.add(B[j++]);
k--;
}
} else if(j >= B.length){
if(hb.contains(C[k] - A[i])) return true;
else{
ha.add(A[i++]);
k--;
}
}
}
return false;
}

【在 x****g 的大作中提到】
: 展开说说,表示不解. hash求和的新思路也有兴趣学习,呵呵。
: 最差怎么都是o(n^2)
: 即使每个都无dup,像
: A=1,2,3,4,5...n
: B=n,n-1,....1
: C=n+1,n+2......n+n
: 那么n+1就有n对
: n+2就n-1对
: ...n+n就1对
: 计算n(n+1)/2.....

x****g
发帖数: 1512
8
这个显然不一样。
代码没细看,但觉得不可能对。
简单举个例子:
a[0]=3;
b[0]=4;
c[0]=6
所以冲上来
a[i]+b[j]>c[k]
但是不能满足
if(ha.contains(C[k] - B[j]) || hb.contains(C[k] - A[i]))
return true;
完了直接死循环了.....
懒得琢磨了,呵呵。

))

【在 e***s 的大作中提到】
: 之前看错题了,以为返回是否存在a[i] + b[j] = c[k]
: 但是复杂度是一样的。
: public static boolean another3Sum(int[] A, int[] B, int[] C){
: HashSet ha = new HashSet();
: HashSet hb = new HashSet();
: int i = 0, j = 0;
: for(int k = 0; k < C.length; k++){
: if(i < A.length && j < B.length){
: if(A[i] + B[j] > C[k]){
: if(ha.contains(C[k] - B[j]) || hb.contains(C[k] - A[i]))

e***s
发帖数: 799
9
我晕了,test case你跑过不?

【在 x****g 的大作中提到】
: 这个显然不一样。
: 代码没细看,但觉得不可能对。
: 简单举个例子:
: a[0]=3;
: b[0]=4;
: c[0]=6
: 所以冲上来
: a[i]+b[j]>c[k]
: 但是不能满足
: if(ha.contains(C[k] - B[j]) || hb.contains(C[k] - A[i]))

g****1
发帖数: 89
10
我觉得外星人挺有道理
不过好像在处理a或b到头时要考虑k++的情况

【在 x****g 的大作中提到】
: 这个显然不一样。
: 代码没细看,但觉得不可能对。
: 简单举个例子:
: a[0]=3;
: b[0]=4;
: c[0]=6
: 所以冲上来
: a[i]+b[j]>c[k]
: 但是不能满足
: if(ha.contains(C[k] - B[j]) || hb.contains(C[k] - A[i]))

相关主题
find median for k sorted arrays[合集] Google电话面试题目
merge k个数组怎样的方法好?一个小公司面经
求这道题的O(N)解 (转载)这题怎么做?
进入JobHunting版参与讨论
x****g
发帖数: 1512
11
确实,我没能理解对,挺好的,继续学习中。

【在 g****1 的大作中提到】
: 我觉得外星人挺有道理
: 不过好像在处理a或b到头时要考虑k++的情况

l********r
发帖数: 140
12
没搞懂. 大侠可不可以在明确一点?
g****1
发帖数: 89
13
嗯,好像有问题。一旦 a[i]+b[j]>c[k] 导致k++, 就失去了以后比较c[k]的机会

【在 x****g 的大作中提到】
: 确实,我没能理解对,挺好的,继续学习中。
e***s
发帖数: 799
14
因为3个数组都是sorted的, a[i]+b[j] > c[k] 证明 c[k] 肯定不能由a[0..i]和b[0.
.j]组合而成。

【在 g****1 的大作中提到】
: 嗯,好像有问题。一旦 a[i]+b[j]>c[k] 导致k++, 就失去了以后比较c[k]的机会
b****f
发帖数: 138
15
Mark
x****g
发帖数: 1512
16
但是c[k]失去了由a[0..i]和b[j+1....n]或者a[i+1...]和b[0...j]构成的判定机会?
a 2 5 6
b 1 3 10
c 7 9
开始i=0;j=0;k=0;
2+1 < 7 所以 i++,j++,k不动
5+3 > 7 所以判定7-5,7-3失败,这个时候k++
所以7从此失去了判定的机会?没机会判出6+1=7这一项了。
不知道我看错没,不能怪我啊,这个写的太邪乎,呵呵。

0.

【在 e***s 的大作中提到】
: 因为3个数组都是sorted的, a[i]+b[j] > c[k] 证明 c[k] 肯定不能由a[0..i]和b[0.
: .j]组合而成。

e***s
发帖数: 799
17
确实是这样,我错了。
我也没想到能比 O(min(m * n, l))更好的了,m, n是3个数组长度较短的两个。

【在 x****g 的大作中提到】
: 但是c[k]失去了由a[0..i]和b[j+1....n]或者a[i+1...]和b[0...j]构成的判定机会?
: a 2 5 6
: b 1 3 10
: c 7 9
: 开始i=0;j=0;k=0;
: 2+1 < 7 所以 i++,j++,k不动
: 5+3 > 7 所以判定7-5,7-3失败,这个时候k++
: 所以7从此失去了判定的机会?没机会判出6+1=7这一项了。
: 不知道我看错没,不能怪我啊,这个写的太邪乎,呵呵。
:

s******t
发帖数: 229
18
我来写个最靠谱的:
先用young,O(n)搞定每一个c[k],一共n个c[k],O(n2)
不过没有利用上sorted的c这个条件,估计还是不太好。。。嘻嘻
1 (共1页)
进入JobHunting版参与讨论
相关主题
面试题求解:remove first duplicate number from an array问个面试题
一个小公司的面经find median for k sorted arrays
这题也可以DP 解吧?merge k个数组怎样的方法好?
找2个sorted array中的第K小的元素,有O(lgn)方法吗?求这道题的O(N)解 (转载)
[算法] unsorted array[合集] Google电话面试题目
Google电话面试题目一个小公司面经
请教一道题目这题怎么做?
问一道在sorted array里search的问题问一道老题
相关话题的讨论汇总
话题: integer话题: hashset话题: else话题: return话题: int