在O(n)时间复杂性中我有一个问题要解决:
“给出一个数字和数字的列表x.查找列表中是否有任何两个加在x上的数字?”
这是我的解决方案:
public class SumMatchResult {
public static void main(String[] args){
int[] numberList = {6,1,8,7,4,6};
int requiredSum = 8;
boolean isSumPresent = checkSumPresentHash(numberList,requiredSum);
if(isSumPresent) {
System.out.println("Numbers exist");
}else {
System.out.println("Numbers donot exist");
}
}
private static boolean checkSumPresentHash(int[] numberList, int requiredSum) {
Map m = new HashMap();
int count = 0;
for(int i=0;i
m.put(i, numberList[i]);
}
for(int i=0;i
if(m.containsValue(requiredSum - numberList[i])){
count++;
}
}
if(count>1){
return true;
}
return false;
}
}
我使用HashMap.containsValue()而不是使用HashSet.contains(),它确实具有O(1)的复杂性,因为我必须考虑到我的输入可能包含相同值的场景.例如,在上述情况下,我可以有一组输入值{3,6,4,4,7}来匹配总和8,这将返回true.
我的上述解决方案的时间复杂度取决于HashMap.containsValue()方法的复杂性.请详细介绍一下containsValue()方法的时间复杂度,并建议我在上述问题上有更好的解决方案.谢谢.