结伴问题。望好朋友们支招,跪下了,觉得很神奇,太棒了想学习学习
6条回答 默认 最新
关注让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
问题描述: 有一个整数数组 arr 和一个目标整数 target,需要找到数组中两个数的和为 target,并返回它们的下标。假定每个输入只对应唯一的答案,而且不可以重复使用相同的元素。 示例: 输入:arr = [2, 7, 11, 15], target = 9 输出:[0, 1] 解释:arr[0]+arr[1]=9,所以返回它们的下标[0,1] 解决方案: 可以使用哈希表来解决该问题。哈希表是一种用于存储键值对的数据结构,能在 O(1) 的时间复杂度内完成查找和插入操作。具体实现步骤如下:- 创建一个空的哈希表 dic,用于存储每个数字的值和它所在的下标。
- 遍历数组 arr,对于每个数字 num,计算目标值与 num 的差值 diff,检查哈希表中是否存在 key 为 diff 的键。
- 如果存在,说明找到了两个数的和为 target 的下标,直接返回它们的下标(包括当前数字 num 和 diff 的下标)。
- 如果不存在,把当前数字 num 作为 key,它的下标 i 作为 value 存入哈希表 dic 中,继续遍历数组。
- 如果遍历结束后仍未找到符合条件的两个数,说明数组中不存在符合要求的两个数,返回空列表。 代码实现: Python 代码如下:
class Solution: def twoSum(nums: List[int], target: int) -> List[int]: dic = {} for i, num in enumerate(nums): diff = target - num if diff in dic: return [dic[diff], i] dic[num] = i return []Java 代码如下:
class Solution { public int[] twoSum(int[] nums, int target) { Map<Integer, Integer> map = new HashMap<>(); for (int i = 0; i < nums.length; i++) { int diff = target - nums[i]; if (map.containsKey(diff)) return new int[] {map.get(diff), i}; map.put(nums[i], i); } return new int[0]; } }注意事项: 在 Python 代码中,需要使用字典(dict)来实现哈希表的功能,同时也需要注意 Python 中 List 的数据类型是动态数组,对应 Java 的 ArrayList。同时,Python 中的 enumerate 函数可以同时返回数组的下标和元素值。 在 Java 代码中,需要使用 HashMap 类来实现哈希表的功能,同时需要注意 Java 中数组是静态数组,需要提前声明数组的长度。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报