力扣(两数之和)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)

posted on 2022-02-06 22:44  狐小妖  阅读(262)  评论(0编辑  收藏  举报