襟のボタンのアルゴリズムの問題 - 二つの数字
質問
整数配列NUMSと目標値の目標を考えると、配列内の2つの整数の目標値を特定し、その配列の添字に戻るにお願いします。
あなたは、各入力が一つだけ答えに対応することを想定することができます。ただし、同じ配列要素を再使用することはできません。
例
所与NUMS = [2、7、11 、15]、目標= 9
ためNUMS [0] + NUMS [1 ] = 2 + 7 = 9
返される[0,1]
トピックソリューション
解決策1:強引な方法
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] targetArray = new int[2];
for(int i = 0; i < nums.length - 1; ++i){
for(int j = i + 1; j < nums.length; ++j){
if(nums[i] + nums[j] == target){
targetArray[0] = i;
targetArray[1] = j;
return targetArray;
}
}
}
return null;
}
}
次のように実行結果は以下のとおりです。
解決策2:HashMapを通過することにより、
class Solution {
public int[] twoSum(int[] nums, int target) {
int[] targetArray = new int[2];
int reduce = 0;
HashMap<Integer, Integer> map = new HashMap<>();
for(int i = 0; i < nums.length; ++i){
reduce = target - nums[i];
if(map.containsKey(reduce)){
targetArray[0] = i;
targetArray[1] = map.get(reduce);
return targetArray;
}
map.put(nums[i], i);
}
return null;
}
}
次のように実行結果は以下のとおりです。