AcWing
  • 首页
  • 活动
  • 题库
  • 竞赛
  • 商店
  • 应用
  • 文章
    • 题解
    • 分享
    • 问答
  • 吐槽
  • 登录/注册

LeetCode 1. 两数之和    原题链接    简单

作者: 作者的头像   请用心听 ,  2022-08-03 15:25:17 ,  所有人可见 ,  阅读 11


0


题目描述

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

样例

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

算法1

哈希表 $O(n)$

循环遍历数组nums,
1. 判断hash表中是否存在key:target-nums[i],存在则返回
2. 将nums[i]插入到hash表中

解释:由于数据保证有且仅有一组解,假设是i,j,则我们循环到j时,nums[i]一定在哈希表中nums[i]一定在哈希表中,且有 nums[i]+nums[j]==target, 所以我们一定可以找到解。

时间复杂度:由于只扫描一遍,且哈希表的插入和查询操作的复杂度是 O(1),所以总时间复杂度是 O(n).

Java 代码

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

0 评论

你确定删除吗?
1024
x

© 2018-2022 AcWing 版权所有  |  京ICP备17053197号-1
用户协议  |  常见问题  |  联系我们
AcWing
请输入登录信息
更多登录方式: 微信图标 qq图标
请输入绑定的邮箱地址
请输入注册信息