力扣(两数之和)python解法
这道题有两种做法,一种是暴力破解,另外一种可以采用哈希表方式破解,暴力破解很简单,但是在最后两个测试案例时过不了,原因是:时间超时,因为,在实际业务中,为了提升用户体验感,需要减少用户的等待时间,看似两种情况都能解决,但是,如果在大量数据面前就会显得尤为重要,所以优化算法就是为了提升用户的体验感的,所以我们题也要解,进阶也要做到,这道题的进阶就是让我们减少执行时间,如图:
减少时间复杂度方法,按照以前讲课说的,就是牺牲内存资源来换取执行效率,原因现在内存相比时间就显得不那么重要了,暴力破解这道题就只有两个for表,但是使用两个for表会增加枚举的时间,采用哈希算法将给定的测试案例列表(nums)中每一个元素去减target的值,然后写进另一个表中(abc表),执行下一个nums的元素时使用in查看此元素是否在abc表中,如果存在,则return当前元素下标与abc表中匹配数值的下标,否则将target减去此元素的值写进abc表中。实现这个算法的优化,只不过值得一提的是,测试案例传入的数据全部是int类型的数据,而不是str类型,而append函数默认写入值为str类型,很多人被卡在这很久,不知道为什么匹配不上,所以建议多多使用print函数查看每个阶段数据类型是什么,下面贴上答案:
class Solution:
def twoSum(self, nums, target: int):
b = []
for a, x in enumerate(nums):
if x in b:
for ac, ab in enumerate(b):
if ab == x:
return [ac, a]
else:
d = target - int(x)
b.append(int(d))
if __name__ == '__main__':
nums = input().split(',')
target = int(input())
dx = Solution()
c = []
c = dx.twoSum(nums, target)
print(c)
本文来自博客园,作者:狐小妖,转载请注明原文链接:https://www.cnblogs.com/huxiaoyao/p/15866564.html