8号

问题: 给定一个数组,,返回两数之和等于目标值的下标

思路: 关键在于为什么使用哈希表,原因就是查找哈希表是否存在target-num[i]的时间复杂度是O(1) 1. 遍历数组,将每个元素与目标值相减,得到一个差值 2. 在哈希表中查找是否存在这个差值,如果存在,则返回两个元素的下标 3. 如果不存在,则将当前元素及其下标存入哈希表中 4. 重复上述步骤,直到找到两个元素的下标

代码:

class Solution {
    public int[] twoSum(int[] nums, int target) {
        Map<Integer, Integer> hashtable = new HashMap<>();
        for (int i = 0; i < nums.length; ++i) {
            if (hashtable.containsKey(target - nums[i])) {
                return new int[]{hashtable.get(target - nums[i]), i};
            }
            hashtable.put(nums[i], i);
        }
        return new int[0];
    }
}