从 n 个数中取出两个数, 使其和为 a
2018-07-06 本文已影响0人
风骚的风
采用穷举法的话, 其时间复杂度为 O((n^2)/2). 略去穷举法的实现.
采用如下实现, 其时间复杂度为 O(n), 空间复杂度增至 O(n).
public class Test {
public static void main(String[] args) {
int[] numberArr = {3, 5, 0, 35, 3, 25, 6, 3, 7, 6};
int sum = 13;
int[] result = find(numberArr, sum);
System.out.println("满足条件的两个数的索引为: " + Arrays.toString(result));
}
public static int[] find(int[] numberArr, int sum) {
Map<Integer, Integer> temp = new HashMap<>();
for (int i = 0; i < numberArr.length; i++) {
int number = numberArr[i];
int target = sum - number;
Integer targetIdx = temp.get(target);
if (targetIdx != null) {
return new int[]{targetIdx, i};
} else {
temp.put(number, i);
}
}
return null;
}
}