For
import java.util.Arrays;
import java.util.Scanner;
public class NumberFor {
//main方法
public static void main(String[] args) {
//键盘读入对象in
Scanner in = new Scanner(System.in);
System.out.println("输入数组长度");
int n = in.nextInt();
System.out.println("输入数组元素");
int nums[] = new int[n]; //nums[n]数组的长度
for (int i = 0; i < n; i++) {
nums[i] = in.nextInt(); //输入元素到数组
}
System.out.println("输入目标值");
int target = in.nextInt();
//下标值返回到 arr数组
int[] arr = twoSum(nums, target);
System.out.println(Arrays.toString(arr));
}
//twoSum方法
public static int[] twoSum(int[] nums, int target) {
//如果只有一个数,直接返回null
if (nums.length <= 1) {
return null;
}
//两个for循环遍历,判断
for (int i = 0; i < nums.length - 1; i++) { //判断第1个元素nums[i]
for (int j = i + 1; j < nums.length; j++) { //判断第2个元素nums[j]
if (nums[i] + nums[j] == target) { //两个数相加等于目标值
return new int[] {i, j}; //返回一个新数组
}
}
}
return null;
}
}
Map
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class NumberMap {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("输入数组长度");
int n = in.nextInt();
System.out.println("输入数组元素");
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = in.nextInt();
}
System.out.println("输入目标值");
int target = in.nextInt();
int[]arr = twoNums(nums, target);
System.out.println(Arrays.toString(arr));
}
public static int[] twoNums(int[] nums, int target) {
Map<Integer, Integer> map = new HashMap<>();
//遍历nums数组,开始map里没东西,先加进去再找
for (int i = 0; i < nums.length; i++) {
//目标值target - 数组中的元素nums[i] = 得到的差值x
int x = target - nums[i];
//如果差值x在数组中,则返回两个数的下标 i, map.get(x)
if (map.containsKey(x)) { //map.containsKey(k)方法 当前集合中是否包含key值 (x)
return new int[] {map.get(x), i}; //map.get(x)方法 通过key 获取当前的value值
}else {
map.put(nums[i], i); //把nums[i] 和 i 存到map集合 对应的key 和 value
}
}
return null;
}
}