我被賦予了O(n)
時間複雜度來解決問題:java中HashMap.containsValue()的時間複雜度是多少?
「?鑑於數字和數字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)
複雜性,因爲,我必須考慮到在我的輸入可能包含相同的值的情況。例如,在上述情況下,我可以爲sum 8
匹配一組輸入值{3,6,4,4,7}
,該值應返回true
。
我上面的解決方案的時間複雜度取決於HashMap.containsValue()
方法的複雜性。請澄清containsValue()
方法的時間複雜性,並建議我是否有更好的解決上述問題的時間複雜性。謝謝。
也許你應該使用'Set',而不是'Map'。 – johnchen902
我會好奇看到一個算法,在O(n)時間解決這個問題。我不確定這是可能的。 –
如何保持一個單獨的'HashMap'作爲他的鍵的值的第一個?通過這種方式,你可以立即知道蝙蝠('O(1)')是否存在價值。這是'O(2n)'的空間,但是,嘿,它就是這樣。 – acdcjunior