欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 锐评 > LeetCode-两数之和(001)

LeetCode-两数之和(001)

2025/2/25 14:06:47 来源:https://blog.csdn.net/fulai00/article/details/144721137  浏览:    关键词:LeetCode-两数之和(001)

一.题目描述

给定一个整数数组 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 <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

四.解法:

方法一:哈希表

我们可以使用一个哈希表 d 来存储每个元素及其对应的索引。

遍历数组 nums,对于当前元素 nums[i],我们首先判断 target−nums[i] 是否在哈希表 d 中,如果在 d 中,说明 target 值已经找到,返回 target−nums[i] 的索引和 i 即可。

时间复杂度 O(n),空间复杂度 O(n),其中 n 为数组 nums 的长度。

Java代码

class Solution {public int[] twoSum(int[] nums, int target) {// 创建一个哈希映射,用于存储数组元素的值和对应的索引Map<Integer, Integer> d = new HashMap<>();// 遍历数组for (int i = 0;; ++i) {// 获取当前索引 i 处的数组元素int x = nums[i];// 计算与 x 互补的值 yint y = target - x;// 检查哈希映射中是否存在键 yif (d.containsKey(y)) {// 如果存在,返回两个数的索引return new int[] {d.get(y), i};}// 将当前元素 x 及其索引 i 存入哈希映射d.put(x, i);}}
}

Kotlin代码

class Solution {fun twoSum(nums: IntArray, target: Int): IntArray {// 创建一个可变的哈希映射,用于存储数组元素的值和对应的索引val m = mutableMapOf<Int, Int>()// 使用 forEachIndexed 遍历数组,获取每个元素及其索引nums.forEachIndexed { i, x ->// 计算与 x 互补的值 yval y = target - x// 从哈希映射中获取 y 的索引 jval j = m.get(y)// 如果 j 不为 null,说明找到了两个数if (j != null) {// 返回两个数的索引return intArrayOf(j, i)}// 将当前元素 x 及其索引 i 存入哈希映射m[x] = i}// 如果没有找到,返回一个空的数组return intArrayOf()}
}

🌟 关注我的CSDN博客,收获更多技术干货! 🌟

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词