я получил проблему решить в O(n)
временной сложности:Какова временная сложность HashMap.containsValue() в java?
«? Учитывая список чисел и числа х найти, если есть любые 2 номеров в списке, которые добавляют до й»
И это мое решение:
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()
и предложить мне, если есть лучшее решение для вышеупомянутой проблемы с точки зрения сложности времени. Спасибо.
Может быть, вы должны использовать 'Set' вместо' Map'. – johnchen902
Мне было бы интересно увидеть алгоритм, который решает это в O (n) времени. Я не уверен, что это возможно. –
Как насчет сохранения отдельного 'HashMap' со значениями первого в качестве его ключей? Этот способ, который вы знаете сразу с места в карьер ('O (1)'), является значением. Это 'O (2n)' пространство, но эй, это его беспокоит. – acdcjunior