Loading

LeetCode 01 两数之和

LeetCode01 两数之和

题目描述

给定一个整数数组 nums和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。

Tips:

  1. 返回的是下标
  2. 保证有解

样例

给定 nums = [2, 7, 11, 15], target = 9

因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

算法分析

暴力做法:两重循环 O(n*n)

哈希表

  • 问题的转换:一个数a,要找到target-a, (a之前)
  • 用哈希表存储前面遍历过的数,枚举当前这个数nums[i]时,找哈希表中找target-nums[i],循环一遍即可

时间复杂度 \(O(n)\)

Java代码

class Solution {
    public int[] twoSum(int[] nums, int target) {
        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

        //开始遍历一遍
        for(int i = 0;i<nums.length;i++){
            int b = target - nums[i];
            if(map.containsKey(b)){
                return new int[]{map.get(b),i};  //键 值   值 是存储的下标
            }

            map.put(nums[i], i);
        }

        return new int[]{-1, -1};
    }
}
posted @ 2020-10-21 17:14  想用包子换论文  阅读(111)  评论(0)    收藏  举报