普歌-毅雁チーム-二数の和(この二数の和は普通ではない)
要件:
整数配列numsと整数目標値targetを指定すると、その配列に目標値の2つの整数が見つかり、配列の下付きを返します.
分析:
ハッシュ検索、遍歴配列nums,iは現在の下付きであり、各値はmapにtarget-nums[i]のkey値が存在するか否かを判断し、存在する場合は2つの値が見つかり、存在しない場合は現在(nums[i],i)をmapに格納し、遍歴が見つかるまで継続する.
実装:
実行結果:結果1: 結果2: あなたの読書に感謝します.足りないところは批判を歓迎します.
整数配列numsと整数目標値targetを指定すると、その配列に目標値の2つの整数が見つかり、配列の下付きを返します.
分析:
ハッシュ検索、遍歴配列nums,iは現在の下付きであり、各値はmapにtarget-nums[i]のkey値が存在するか否かを判断し、存在する場合は2つの値が見つかり、存在しない場合は現在(nums[i],i)をmapに格納し、遍歴が見つかるまで継続する.
実装:
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Solution {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = 0;//
int[] nums = new int[10];// nums
int target = 0;// target
System.out.println(" nums ");
n = sc.nextInt();
System.out.println(" nums ");
for (int i = 0; i <= n - 1; i++) {
nums[i] = sc.nextInt();
}
System.out.println(" target ");
target = sc.nextInt();
int[] ints = twoSum(nums, target);
System.out.println(" "+Arrays.toString(ints));
}
public static int[] twoSum(int[] nums, int target) {
Map codeMap = new HashMap(nums.length - 1);// Mao
for (int i = 0; i <= nums.length; i++) {
if (codeMap.containsKey(target - nums[i])) {// target-nums[i] key
return new int[]{codeMap.get(target - nums[i]), i};//
}
codeMap.put(nums[i], i);// ,
}
throw new IllegalArgumentException("No two sum solution");
}
}
実行結果:
nums
4
nums
2
7
11
15
target
9
[0, 1]
nums
3
nums
3
2
4
target
6
[1, 2]