我为两个总和问题构建了一个数据结构。在这个数据结构中,我构建了add和find方法。
add - 将数字添加到内部数据结构中
find - 查找是否存在任何数字,其总和等于该值。
例如:
add(1); add(3); add(5);
find(4) // return true
find(7) // return false
以下是我的代码,那么这段代码有什么问题?
http://www.lintcode.com/en/problem/two-sum-data-structure-design/
这是测试网站,有些案例无法通过
public class TwoSum {
private List<Integer> sets;
TwoSum() {
this.sets = new ArrayList<Integer>();
}
// Add the number to an internal data structure.
public void add(int number) {
// Write your code here
this.sets.add(number);
}
// Find if there exists any pair of numbers which sum is equal to the value.
public boolean find(int value) {
// Write your code here
Collections.sort(sets);
for (int i = 0; i < sets.size(); i++) {
if (sets.get(i) > value) break;
for (int j = i + 1; j < sets.size(); j++) {
if (sets.get(i) + sets.get(j) == value) {
return true;
}
}
}
return false;
}
}
答案 0 :(得分:1)
您的代码似乎没有任何问题。
然而,编码挑战可能需要更高效的解决方案。 (你检查每个项目的每个项目,这将采取O(N ^ 2))。
实施find
的最佳解决方案是使用HashMap
,这将采用O(N)。它详细解释了here。