算法 系列博客

【算法】刷题范围建议 和 代码规范
【算法】复杂度理论 ( 时间复杂度 )

【字符串】最长回文子串 ( 蛮力算法 )
【字符串】最长回文子串 ( 中心线枚举算法 )
【字符串】最长回文子串 ( 动态规划算法 ) ★
【字符串】字符串查找 ( 蛮力算法 )
【字符串】字符串查找 ( Rabin-Karp 算法 )

【算法】双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 )
【算法】双指针算法 ( 有效回文串 II )
【算法】哈希表 ( 两数之和 )


文章目录

  • 算法 系列博客
  • 一、两数之和

使用哈希表解决问题 , 一般不需要手动实现哈希表 , 一般使用 HashSet 或 HashMap 即可 ;

一、两数之和


两数之和 : https://www.lintcode.com/problem/56/

给定一个未排序的数组 , 找到数组中的两个元素之和 , 等于给定的 target 值 ;

该问题最直观的解法 , 就是 蛮力算法 ;

如 : 给定数组 [6, 4, 2, 9] , 给定 target 值为 10 , 找出数组中哪两个元素之和为 10 ;

如果使用蛮力算法 , 就是遍历所有的数组元素 , 如 遍历 6 , target ( = 10 )减去该被遍历的元素 , 结果是 4 , 然后检测 4 在不在数组中 ;
这样需要设计 两层循环 , 外层循环遍历数组元素 , 内层循环遍历 target - 数组元素 值是否在数组中 ;
上述算法事件复杂度为 O(n2)O(n^2)O(n2) ;

这里的内层循环中 , 检测一个数字是否在数组中 , 可以使用 哈希表 进行实现 , 哈希表查询的单次操作的时间复杂度是 O(1)O(1)O(1) , nnn 次查询的操作是 O(n)O(n)O(n) ;
哈希表在该算法中 , 既不是输入 , 也不是输出 , 是算法计算过程中的耗费 , 因此其空间复杂度是 O(n)O(n)O(n) ;

哈希表的 时间复杂度是 O(n)O(n)O(n) , 空间复杂度是 O(n)O(n)O(n) ;

哈希表存使用 HashMap 集合体现 ;
设计一个循环 , 遍历数组元素 number ; 遍历时检测 target - number 是否在HashMap中 , 如果不在 , 则加入到哈希表中 ;

将 target - number 的值作为 HashMap 集合的 Key 键 , 将该 number 的索引作为 Value 值 ;

上述操作 , 一边遍历 , 一边将数组元素插入到哈希表中 , [3, 6, 2, 4] , 在遍历到 6 时 , 从哈希表中查找 10 - 6 = 4 这个值 , 哈希表中没有 4 , 但此时将 4=2 键值对 插入了 HashMap , 在之后遍历 4 时 , 肯定能找到索引值 2 ;

按照这种遍历方式 , 如果存在这两个元素 , 总能在 O(n)O(n)O(n) 时间内找到两个值

代码示例 :

import java.util.HashMap;class Solution {public int[] twoSum(int[] numbers, int target) {// 键存放 target - numbers[i], 值存放对应的 i 索引值// 如果正在遍历的 numbers[j], 恰好等于某个 target - numbers[i]// 说明 i, j 就是要找的两个索引值HashMap<Integer, Integer> hashMap = new HashMap<>();// 要返回的值int[] result = new int[2];for (int i = 0; i < numbers.length; i++) {if (hashMap.get(numbers[i]) != null) {// 如果集合中有该值, 说明已经找到了两数之和为 target 的两个元素了, 可以直接返回result[0] = hashMap.get(numbers[i]);result[1] = i;return result;}// 向哈希表中存储 target - numbers[i]hashMap.put(target - numbers[i], i);}return result;}
}class Main {public static void main(String[] args) {System.out.println(new Solution().twoSum(new int[]{1,2,4,6}, 10));}
}

【算法】哈希表 ( 两数之和 )相关推荐

  1. 算法动画图解:两数之和(哈希表)

    更多算法动画图解,长按此链接跳转AppStore 动画 算法动画图解:两数之和(哈希表) 思路 哈希表map用来保存一个数,另一个数在遍历nums的时候和map中的数尝试求和是否为target,如果求 ...

  2. 【算法-初级-数组】两数之和(JavaScript实现)

    [算法-初级-数组]两数之和(JavaScript实现) 博客说明 文章所涉及的部分资料来自互联网整理,当然还有自己个人的总结和看法,分享的目的在于共建社区和巩固自己.引用的资料如有侵权,请联系本人删 ...

  3. C# 算法题系列(一) 两数之和、无重复字符的最长子串

    题目一 原题链接 https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整 ...

  4. 代码随想录哈希表——四数之和

    题目 题意:给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等 ...

  5. (哈希)两数之和(leetcode 1)

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

  6. python【力扣LeetCode算法题库】—两数之和

    给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元 ...

  7. 两数之和(Two Sum)

    文章目录 题目 一.暴力算法 二.利用hashMap键的唯一性 题目 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回 ...

  8. 算法训练Day6 | LeetCode:242. 有效的字母异位词(数组作哈希表);349. 两个数组的交集(Set作哈希表);202.快乐数 (Set作哈希表);1. 两数之和(Map作哈希表)

    目录 LeetCode242. 有效的字母异位词 方法:数组作哈希表 1. 思路 2. 代码实现 3. 复杂度分析 4. 思考 Leetcode349. 两个数组的交集 方法一:用Set作HashMa ...

  9. Two Sum (两数之和) - Hash Table (哈希表)

    Two Sum (两数之和) - Hash Table (哈希表) https://leetcode-cn.com/problems/two-sum/ Given an array of intege ...

最新文章

  1. 寻找隐形冠军 支付宝、微信用得那么溜,可谁知道背后有一名“上海功臣
  2. PBio-2018:如何设计可预测植物表型的微生物组
  3. boost::signals2模块实现为类定义预析构函数的最小示例的测试程序
  4. VTK:Snippets之SaveSceneToFieldData
  5. 1452.接水问题(思维)
  6. vue 项目的I18n国际化之路
  7. Sql Server 部署SSIS包完成远程数据传输
  8. sqllite开发安卓项目_苹果安卓合作了?两大巨头共同居然共同开发这个项目
  9. 第九次作业(杨辉三角)
  10. 不同机器,打印速度相差巨大
  11. 群接龙,JK上报一键化手机脚本autojs
  12. Sqlmap常用命令总结及注入实战(Access、mysql)
  13. matlab lte rsrp,为什么选择 FieldFox 手持式分析仪?- 更宽带宽,更高精度
  14. arcgis 经纬度转大地坐标_ArcGIS的地理坐标系与大地坐标系
  15. android 模拟器 启动,android开发之启动模拟器并安装游戏apk
  16. 基于VBA实现Excel十字交叉高亮显示
  17. 阵列麦克风声音定位-代码python实现-二维与三维声音定位
  18. 环境变量的作用,为什么要设置环境变量?
  19. 2022年上半年,产品经理的55条心得总结!
  20. Android 容联云IM集成:初始化与登录中的坑

热门文章

  1. 关于使用AIR开发移动APP 的技术解决方案 笔记
  2. AlphaBlend 使用方法
  3. leetcode 73 矩阵置零 Python
  4. loadrunner 更新中......
  5. FreeMarker 语法 include 引用模板
  6. Kubernetes master节点的高可用配置
  7. python入门(七)
  8. U-Boot 提供的基本命令
  9. 理解统计信息(6/6):统计信息汇总贴
  10. FastDFS安装、配置、部署(三)-Storage配置具体解释