好口碑自适应网站建设,邯郸网站建设公司排名,建设企业网站内容,海南住房和城乡建设部网站题目描述 给定一个整数数组 nums 和一个整数目标值 target#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数#xff0c;并返回它们的数组下标。 假设每种输入只会对应一个答案。但是#xff0c;数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回…题目描述 给定一个整数数组 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 只会存在一个有效答案 方法一暴力枚举
最容易想到的方法是枚举数组中的每一个数 x寻找数组中是否存在 target - x。
当我们使用遍历整个数组的方式寻找 target - x 时需要注意到每一个位于 x 之前的元素都已经和 x 匹配过因此不需要再进行匹配。而每一个元素不能被使用两次所以我们只需要在 x 后面的元素中寻找 target - x。
def two_sum(nums, target):n len(nums)print(the len of nums is: str(n))for i in range(n):for j in range(i1, n):if nums[i] nums[j] target:print([i, j])return [i, j]return []def main():nums [1, 4, 7, 8, 9, 10, 11, 43, 23, 54]target 9two_sum(nums, target)if __name__ __main__:main()方法二哈希表
思路及算法
注意到方法一的时间复杂度较高的原因是寻找 target - x 的时间复杂度过高。因此我们需要一种更优秀的方法能够快速寻找数组中是否存在目标元素。如果存在我们需要找出它的索引。
这样我们创建一个哈希表对于每一个 x我们首先查询哈希表中是否存在 target - x然后将 x 插入到哈希表中即可保证不会让 x 和自己匹配。
def two_num_hash(nums, target):hash_table dict()for i, num in enumerate(nums):# print(nop)if target - num in hash_table:print([hash_table[target - num], i])return [hash_table[target - num], i]hash_table[nums[i]] iprint(hash_table)return []def main():nums [1, 4, 7, 8, 9, 10, 11, 43, 23, 54]target 9two_num_hash(nums, target)if __name__ __main__:main()