题目: 设计一个算法判断一个数组中是否存在两个整数的和为100。
思路: 这个题目可能最直观的想法是先排序,然后通过两个指针一个从前往后一个从后往前移动,寻找合为100的两个整数。但是这个算法的时间复杂度为 O(nlogn),不是很理想。
推荐的思路还是采用HashMap,HashhMap常常能在数组查找类的算法中立神功。先一趟遍历,把所有的整数作为键,出现的次数作为值加到HashMap。然后依次遍历HashMap,每遍历一个键key就判断一下,100-key是都存在于该HashMap。
参考代码:
import java.util.HashMap;
public class SumIs100 {
public boolean sum100(int[] array) {
if (array == null) {
return false;
}
if (array.length == 0) {
return false;
}
HashMap<Integer, Integer> hashMap = new HashMap<>();
for (int i = 0; i < array.length; i++) {
if (hashMap.containsKey(array[i])) {
hashMap.put(array[i], (int) hashMap.get(array[i]) + 1);
} else {
hashMap.put(array[i], 1);
}
}
// for (Integer key :hashMap.keySet() ) {
// System.out.println("key: " + key + " value: " + hashMap.get(key));
// }
for (Integer key : hashMap.keySet()) {
if (hashMap.containsKey(100 - key))
return true;
}
return false;
}
public static void main(String[] args) {
int[] a = { 1, 2, 3, 81, 5, 97, 6 };
SumIs100 sumIs100 = new SumIs100();
if (sumIs100.sum100(a)) {
System.out.println("存在等于100 的两个数");
} else {
System.out.println("不存在等于100的两个数");
}
}
}