一、题目
'''
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。
你可以按任意顺序返回答案。变种:这个题目可以让返回多组数字、有序返回、多数之和
'''
二、思路:
1、首先,确定比较的维度:比较的目标值是整数,那么,要把数组里的元素,按整数的形式,去和target去比较
2、其次,找到题目中包含的关系:随便选一个元素X,与target,另一个元素y应该是应该等于target-x,且x!=y
3、然后,明确要返回的类型:数组下标。所以本题的主角是用下标表示整数去比较。元素转化为下标,不太方便,但是下标转化为元素,比较容易。list[下标]=元素
4、最后,选择算法思路:
三、解法
暴力枚举:循环法
写法1:结果报错:list[i] + list[j] == target
class Solution:def twoSum(self,nums:list[int],target:int):n = len(nums)for i in range(n-1):for j in range(i+1,n-1):if list[i] + list[j] == target:return [i,j]return []程序报错的原因是在内部循环中,你使用了list[i]和list[j]来访问列表元素,但是应该使用nums[i]和nums[j]
写法2:结果[0,1]---简单版本,只返回第一对符合target的元素索引
class Solution:def twoSum(self,nums:list[int],target:int):n = len(nums)for i in range(n-1):for j in range(i+1,n-1):if nums[i] + nums[j] == target:return [i,j]return []if __name__ == '__main__':nums = [2,7,4,5,11,15]solution = Solution()result = solution.twoSum(nums,9)print(result)
写法3:结果[[0, 1], [2, 3]]
class Solution:def twoSum(self, nums: list[int], target: int):n = len(nums)result = []for i in range(n-1):for j in range(i+1, n):if nums[i] + nums[j] == target:result.append([i, j])return resultif __name__ == '__main__':nums = [2, 7, 4, 5, 11, 15]solution = Solution()result = solution.twoSum(nums, 9)print(result)
哈希表法:字典法
# 写法一:问题不会写
class Solution:def twoSum(self,nums:list[int],target:int):hash_map ={}n = len(nums)for i,nu