题目:

1. 两数之和

给定一个整数数组 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. 1. 两数之和——题解
  2. Java 数组
  3. 重新认识java(十一)---- java中的数组
  4. 类 HashMap<K,V>
  5. API学习HashMap
  6. 【深入Java基础】HashMap的基本用法
  7. Java 集合系列10之 HashMap详细介绍(源码解析)和使用示例
  8. Java map 详解 - 用法、遍历、排序、常用API等

附: