Java中HashMap.containvalue()的时间复杂度是多少?
我得到了一个时间复杂度的问题要解决:O(n)
“给定一个数字和数字x的列表。查找列表中是否有任何 2 个数字加起来等于 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<Integer, Integer> m = new HashMap<Integer,Integer>();
int count = 0;
for(int i=0;i<numberList.length;i++){
m.put(i, numberList[i]);
}
for(int i=0;i<numberList.length;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}
sum 8
true
我上面的解决方案的时间复杂度取决于方法的复杂程度。请对方法的时间复杂度进行一些阐明,并建议我在时间复杂度方面是否有更好的解决方案来解决上述问题。谢谢。HashMap.containsValue()
containsValue()