1. 两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。

示例 1:

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

示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]

示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]

提示:

2 <= nums.length <= 10^4
-109 <= nums[i] <= 10^9
-109 <= target <= 10^9
只会存在一个有效答案

  • 暴力求解
class Solution {/*** (暴力枚举) O(n^2)* 暴力枚举方法很简单:两重循环枚举下标 i,j,然后判断 nums[i]+nums[j] 是否等于 target。* 时间复杂度:由于有两重循环,所以复杂度是 O(n^2).*/public static int[] twoSum1(int[] nums, int target) {for (int i = 0; i < nums.length; i++) {for (int j = 0; j < i; j++) {if (nums[i] + nums[j] == target) {return new int[]{j, i};}}}/*for (int i = 0; i < nums.length; i++) {for (int j = i + 1; j < nums.length; j++) {if(nums[i] + nums[j] == target)return new int[]{i, j};}}*/return null;}
}
  • 哈希表法求解
class Solution {/*** (哈希表) O(n)* 重点:哈希表map中的key存放的是数组中的值,value存放的是该值在数组中的下标。* 循环一遍 nums数组,在每步循环中我们做两件事:*  1. 判断 target−nums[i] 是否在哈希表中;*  2. 将 nums[i] 插入哈希表中;* 解释:由于数据保证有且仅有一组解,假设是 [i,j](i<j),则我们循环到 j 时,nums[i]一定在哈希表中,* 且有 nums[i]+nums[j]==target, 所以我们一定可以找到解。* 时间复杂度:由于只扫描一遍,且哈希表的插入和查询操作的复杂度是 O(1),所以总时间复杂度是 O(n).*/public int[] twoSum(int[] nums, int target) {HashMap<Integer, Integer> map = new HashMap<>();for (int i = 0; i < nums.length; i++) {int another = target - nums[i];if (map.containsKey(another)) {return new int[]{map.get(another), i};}map.put(nums[i], i);}return new int[]{-1, -1};}
}

LeetCode 1. 两数之和【哈希表】相关推荐

  1. [leetcode]1.两数之和 + 哈希表:梦开始的地方,英语的abandon

    方案一:暴力题解没什么可说的,当然不是面试官想看到的 复杂度分析 时间复杂度:O(N^2),其中 N是数组中的元素数量.最坏情况下数组中任意两个数都要被匹配一次.空间复杂度:O(1). 方案二:直白来 ...

  2. [leetcode]1.两数之和

    [leetcode]1.两数之和 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应 ...

  3. LeetCode 1. 两数之和

    LeetCode 1. 两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入 ...

  4. [hashmap|空间换时间] leetcode 1 两数之和

    [hashmap|空间换时间] leetcode 1 两数之和 1.题目 题目链接 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下 ...

  5. C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组

    C/C++描述 LeetCode 167. 两数之和 II - 输入有序数组   大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博主目前仅在 ...

  6. LeetCode 170. 两数之和 III - 数据结构设计(哈希map)

    文章目录 1. 题目 2. 解题 1. 题目 设计并实现一个 TwoSum 的类,使该类需要支持 add 和 find 的操作. add 操作 - 对内部数据结构增加一个数. find 操作 - 寻找 ...

  7. 【前端来刷LeetCode】两数之和与两数相加

    大部分玩前端的小伙伴,在算法上都相对要薄弱些,毕竟调样式.调兼容就够掉头发的了,哪还有多余的头发再去折腾. 确实在前端中需要使用到算法的地方是比较少,但若要往高级方向发展,算法的基本功就非常重要啦.对 ...

  8. 力扣(leetcode)-1. 两数之和

    描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标. 你可以假设每种输入只会对应一个答案.但是,数组 ...

  9. 【LeetCode】两数之和

    package leetcode.editor.cn;//给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. // // 你可 ...

最新文章

  1. linux 用户和权限管理
  2. 计算机三级考试网络技术怎么复习,2017计算机三级考试的三大复习阶段(网络技术为例)...
  3. Maven常用的命令
  4. JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法...
  5. 苹果自研 M1 芯片性能强大,却不支持 Docker ?
  6. python 类函数 成员函数_python内置函数类型,如何为新类型定义成员函数?
  7. JAVA学习第六十三课 — 关于client服务端 amp;amp; URL类 amp; URLConnection
  8. php单页搜索引擎小偷,PIGO mini php搜索小偷 v2.0 正式版
  9. 施乐打印机驱动程序安装(CP315/318DW)
  10. 信安冬令营实训报告(信息收集,主机渗透,内网渗透)
  11. EBS常用查询语句_查询银行账户
  12. 用Python做数据分析告诉你奶茶哪家最好喝性价比最高?
  13. 生活中错误的英文——写错的标语
  14. python在mac模拟鼠标点击_如何使用Python在Mac中控制鼠标?
  15. .NET : 一定不要忘记关闭DataReader对象
  16. java-net-php-python-jspm现代化社区去也管理系统计算机毕业设计程序
  17. MySQL学习笔记_03
  18. 底层放弃教育,中产过度焦虑,上层不玩中国高考
  19. 取代 Ant:使用 Maven 管理 Wowza 插件开发
  20. 将String字符串转化为int

热门文章

  1. Android8.1 MTK平台 系统需求定制
  2. 远程过程调用RPC 2:RPC思想与RPC框架
  3. 麒麟v10系统开启ssh服务
  4. linux文件编程 打开 创建 写入
  5. mockjs——mockjs定义、mockjs安装、mockjs使用、mockjs方法、mockjs语法、代码示例
  6. 刷爆leetcode第二期 0002~0006
  7. ViSP学习笔记(三):新建Visp工程并使用CMake完成编译
  8. 司铭宇讲师:浙江某汽车配件公司《中层干部管理与领导力提升》内训
  9. MySQL数据库数据迁移
  10. 远程桌面复制文件到本地,报错“未指定的错误”