leetcode刷题:两数之和

leetcode刷题:两数之和

题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
开始思路:
只是做出来,但是没有考虑只对应一个答案,两个for循环不容易解决重复问题,
 1 a = [2,4,6,3]
 2 b = 9
 3 def twoSum(nums, target):
 4     lens = len(nums)
 5     for i in range(lens):
 6         for j in range(i+1,lens):
 7             if nums[i]+nums[j] == target:
 8                print(i, j)
 9                break
10         break

这样在列表的第一个第二个值重复时候会出错

改正思路:只循环一个j,和值减去当前循环值去寻找差值,得到唯一性:

 1 a = [2,4,6,3]
 2 b = 9
 3 def twoSum(nums, target):
 4     lens = len(nums)
 5     for i in range(1, len(nums)):
 6         temp = nums[:i]
 7         if (target - nums[i]) in temp:
 8             j = temp.index(target - nums[i])
 9             print(j, i)
10 
11 
12 twoSum(a, b)

需要学习注意的是:

range 的范围是从0到i-1

列表的下标范围是从0开始对应元素

a[:1]表示a[0],列表的第一个元素

进一步学习:

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
enumerate(sequence, [start=0])
  • sequence — 一个序列、迭代器或其他支持迭代对象。
  • start — 下标起始位置。
 1 def two_sum(nums, target):
 2     """这样写更直观,遍历列表同时查字典"""
 3     dct = {}
 4     for i, n in enumerate(nums):
 5         #nums自动识别为字典,nums中下标为键,值为列表对应值
 6         cp = target - n
 7         #寻找和减去第一个的数的差值
 8         if cp in dct:
 9             print([dct[cp], i])
10         else:
11             dct[n] = i
12             #返回的一种写法
13 
14 
15 two_sum(a, b)

引申算法:哈希算法

 1 用字典模拟哈希求解
 2 字典记录num1和num2的值和位置
 3 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
 4 def twoSum(nums, target):
 5     hashmap={}
 6     #存储的内容是键值对(key-value)映射
 7     for ind,num in enumerate(nums):
 8         hashmap[num] = ind
 9     for i,num in enumerate(nums):
10         j = hashmap.get(target - num)
11         if j is not None and i!=j:
12             return [i,j]
最后两个引用出处
作者:lao-la-rou-yue-jiao-yue-xiang
链接:https://leetcode-cn.com/problems/two-sum/solution/xiao-bai-pythonji-chong-jie-fa-by-lao-la-rou-yue-j/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/2771.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号