
1 两数之和(map、快慢指针)
初始化哈希表:使用 遍历数组:对于每个数值,计算其补数(目标值减去当前数值)。 查找补数:如果补数存在于哈希表中,返回补数对应的下标及当前数值的下标。 记录数值:如果补数不存在,将当前数值及其下标记录到哈希表中。 处理异常情况:如果遍历完数组无果,抛出异常,符合题目要求的唯一解。
发布日期:2021-05-07 21:50:42
浏览次数:24
分类:精选文章
本文共 1057 字,大约阅读时间需要 3 分钟。
问题描述
给定一个整数数组 nums
和一个目标值 target
,需要在数组中找到两个不同的整数,使得它们的和等于目标值,并返回这两个整数的下标。
思路分析
解决这个问题可以采用多种方法,以下是几种常见的解决思路:
递归方法:使用两个指针分别从数组的两端开始,向中间移动,直到找到和为目标值的两个数。这种方法的时间复杂度为 O(n^2),在数组较长时可能效率较低。
哈希表结合快慢指针法:首先使用哈希表记录每个数值的下标,然后对数组进行排序,使用快慢指针查找和为目标值的两个数。这种方法的时间复杂度为 O(n log n),在处理重复数值时需要注意下标的正确记录。
官方优化方法:使用一次遍历和哈希表,快速找到补数,适用于大部分情况,时间复杂度为 O(n),代码简洁高效。
代码实现
以下是基于官方优化方法的高效实现:
import java.util.HashMap;import java.util.Map;class Solution { public int[] twoSum(int[] nums, int target) { Mapmap = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int complement = target - nums[i]; if (map.containsKey(complement)) { return new int[] { map.get(complement), i }; } map.put(nums[i], i); } throw new IllegalArgumentException("No two sum solution"); }}
代码解释
HashMap
记录每个数值及其对应的下标。这种方法在时间复杂度和代码简洁性上都非常出色,适用于大多数情况。
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月20日 22时26分25秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
AtCoder Beginner Contest 100 题解
2019-03-06
【数据结构】可持久化线段树初步
2019-03-06
克拉默法则&矩阵分块:线性代数学习笔记2
2019-03-06
后缀树
2019-03-06
Java高性能编程之CAS与ABA及解决方法
2019-03-06
从BIO到Netty的演变
2019-03-06
《算法导论》第二章笔记
2019-03-06
HTML `capture` 属性
2019-03-06
CSS盒子模型
2019-03-06
HTML节点操作
2019-03-06
浏览器页面呈现过程
2019-03-06
HTML5新特性
2019-03-06
async/await剖析
2019-03-06
cmp命令
2019-03-06
一次编辑
2019-03-06
od命令
2019-03-06
简单工厂模式
2019-03-06
代理模式
2019-03-06
Js中Currying的应用
2019-03-06
长按键入
2019-03-06