力扣最热100题之两数和

力扣最热100题之两数之和

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

分析

题目让你在数组中找到两个数,这两个数的和为给定值total。最普遍的思路就是两层训练,然后一组一组遍历尝试,但是这种方法时间复杂度是平方级别的,不可取。所以排除该思路。
另一种思路就是我们利用Map数据结构中的containsKey()方法,对于数组中的每一个数而言,都用目标值减去该数得到与它匹配的数值,然后在map中寻找看是否存在该数值,如果存在就获取该数值的下标和本次循环到的数值下标返回,如果不存在,就将本次循环到的数值以及下标存入map集合。
当然,我们也可以直接在每次循环时查找本次循环到的数值是否存在在集合中,如果存在就返回两个下标,否则就将目标值total减去该数值存入到map的key中,下标存入value中。

    public int[] twoSum(int[] nums, int target) {
        int[] indexs = new int[2];

        // 建立k-v ,一一对应的哈希表
        HashMap<Integer,Integer> hash = new HashMap<Integer,Integer>();
        for(int i = 0; i < nums.length; i++){
            if(hash.containsKey(nums[i])){
                indexs[0] = i;
                indexs[1] = hash.get(nums[i]);
                return indexs;
            }
            // 将数据存入 key为补数 ,value为下标
            hash.put(target-nums[i],i);
        }

        return indexs;
    }
<think>好的,我现在需要处理用户关于LeetCode热100的查询。首先,用户希望找到相关的解思路和讲解。根据用户提供的引用内容,特别是引用[1]和引用[2],我需要先确认这些资源是否足够详细,或者是否需要补充其他信息。 用户提到引用[1]中有一个解列表,包括LeetCode 35. 搜索插入位置,这涉及二分查找的变种。用户可能希望得到具体的解方法,比如如何处理目标值不存在的情况,返回left指针的位置。同时,引用[2]链接到一篇可能更详细的文章,但需要确认链接是否有效,或者是否有其他资源可用。 接下来,我需要考虑用户的需求是否被现有引用内容满足。如果现有的解列表和文章足够,那么可以直接推荐这些资源。但可能还需要补充一些常见的解策略,比如双指针、动态规划等,这些在热100中常见的方法。 另外,用户的问中还可能涉及不同型的分类,比如九、双指针/三指针(共3),这可能意味着用户希望按型分类学习。因此,在回答中需要将问按类型归类,并提供每个类型的典型目和解思路。 还需要检查是否有其他常见的热100目未被提及,比如两数之和、链表反转等,确保回答的全面性。同时,要确保回答符合之前的系统级指令,正确使用LaTeX格式,并生成相关问。 最后,生成的相关问需要围绕用户可能的后续疑问,比如如何准备刷、时间空间复杂度优化等,帮助用户进一步学习。</think>[用户可见层] # LeetCode热100思路与资源指引 ## 一、核心解方法分类 根据目类型可分为: 1. **二分查找**(如第35) - 变种型处理技巧:当$target$不存在时返回插入位置,需理解循环终止时$left$和$right$的关系[^1] - 示例代码框架: ```python def searchInsert(nums, target): left, right = 0, len(nums)-1 while left <= right: mid = (left + right) // 2 if nums[mid] == target: return mid elif nums[mid] < target: left = mid + 1 else: right = mid - 1 return left # 关键点 ``` 2. **双指针技巧** - 三数之和类问:通过排序+双指针将时间复杂度从$O(n^3)$降为$O(n^2)$ - 快慢指针应用:链表环检测(Floyd算法) 3. **动态规划** - 背包问变形:使用二维状态数组处理子集和问 - 状态转移方程构建:如最长递增子序列的$dp[i] = max(dp[i], dp[j]+1)$结构 ## 二、优质资源推荐 1. 型分类详解(含Python/Java实现): - [LeetCode热100型分类汇总](https://juejin.cn/post/7140176848285073438) [^2] - 包含动态规划、回溯算法等12类型的代码模板 2. 高频目精讲: - 第5(最长回文子串)的中心扩展法实现 - 第15(三数之和)的去重技巧 - 第21(合并两个有序链表)的递归写法 3. 刷路径建议: ```mermaid graph TD A[掌握基础数据结构] --> B[学习算法模板] B --> C{按类型专项训练} C --> D[数组/字符串] C --> E[链表操作] C --> F[树形结构] ``` ## 三、典型目解析示例 ### 例:62. 不同路径 **动态规划解法**: - 状态定义:$dp[i][j]$表示到达$(i,j)$的路径数 - 转移方程:$$dp[i][j] = dp[i-1][j] + dp[i][j-1]$$ - 空间优化:可将二维数组压缩为一维数组,时间复杂度保持$O(mn)$ ```python def uniquePaths(m, n): dp = [1] * n for _ in range(1, m): for j in range(1, n): dp[j] += dp[j-1] return dp[-1] ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值