O(n)
時間の複雑さで解決する問題が与えられました:
「数と数 x のリストが与えられました。リストに合計 x になる 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;
}
}
入力に同じ値が含まれる可能性があるシナリオを考慮しなければならないため、確かに複雑な a を使用HashMap.containsValue()
する代わりに使用しています。たとえば、上記の場合、 に一致する一連の入力値を持つことができ、これは を返す必要があります。HashSet.contains()
O(1)
{3,6,4,4,7}
sum 8
true
HashMap.containsValue()
上記のソリューションの時間の複雑さは、メソッドの複雑さに依存します。メソッドの時間の複雑さに光を当てて、時間の複雑さのcontainsValue()
点で上記の問題に対するより良い解決策があるかどうかを提案してください。ありがとうございました。