题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,
并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。
示例:
给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]
解析:
 
 
代码:
import java.util.*;
public class code1 {
    // 法一:暴力法
    // public static int[] twoSum(int[] nums, int target) {
    // for (int i = 0; i < nums.length; i++) {
    // for (int j = i + 1; j < nums.length; j++) {
    // if (nums[j] == target - nums[i]) {
    // int a[] = new int[] { i, j };
    // return a;
    // }
    // }
    // }
    // throw new IllegalArgumentException("No two sum solution");
    // }
    // 法二:两遍哈希表
    // public static int[] twoSum(int[] nums, int target) {
    // Map<Integer, Integer> map = new HashMap<>();
    // for (int i = 0; i < nums.length; i++) {
    // map.put(nums[i], i);
    // }
    // for (int i = 0; i < nums.length; i++) {
    // int temp = target - nums[i];
    // if (map.containsKey(temp) && map.get(temp) != i) {
    // return new int[] { i, map.get(temp) };
    // }
    // }
    // throw new IllegalArgumentException("No two sum solution");
    // }
    // 法三:一遍哈希表
    public static int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int temp = target - nums[i];
            if (map.containsKey(temp)) {
                return new int[] { map.get(temp), i };
            }
            map.put(nums[i], i);
        }
        throw new IllegalArgumentException("No two sum solutclion");
    }
    public static void main(String[] args) {
        int nums[] = { 2, 7, 11, 15 };
        int target = 9;
        int[] b = twoSum(nums, target);
        System.out.print("[");
        for (int i = 0; i < b.length; i++) {
            if (i != b.length - 1) {
                System.out.print(b[i] + ", ");
            } else {
                System.out.print(b[i]);
            }
        }
        System.out.print("]");
    }
}
运行结果:
参考:
- 1. 两数之和——题解
- Java 数组
- 重新认识java(十一)---- java中的数组
- 类 HashMap<K,V>
- API学习HashMap
- 【深入Java基础】HashMap的基本用法
- Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
- Java map 详解 - 用法、遍历、排序、常用API等

 京公网安备 11010502036488号
京公网安备 11010502036488号