youlitaiGLZ的LeetCode刷题笔记1

1.两数之和

题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。


示例:给定 nums = [2, 7, 11, 15], target = 9
因为 nums[0] + nums[1] = 2 + 7 = 9
所以返回 [0, 1]

题目解法:
1.首先想到暴力解法,两层循环遍历所有的数字组合情况,得到符合要求的一组解对应的数字下标组合。这种方法的时间复杂度为O( n 2 n^2 ),效率较低,有一定超时风险。空间复杂度为O(1)。
2.为了优化时间复杂度,想到运用hash表的方法记录数字的索引。这样只需要循环两边:第一遍循环nums数组将数字和对应下标记录在hash表中,第二次循环判断另一个加数(target-当前数字)是否存在于hash表中。这样时间复杂度为O(n),空间复杂度O(n)。
3.以上方法可以再次优化。仅做一次循环,循环时判断当前数字的另一加数是否在表中,如果在则输出答案,如果不在则将当前数字和索引记录入hash表。这样做的时间复杂度为O(n)(因为少了一次循环,可以认为是从2n优化到n),空间复杂度为O(n)(这样在最差情况下需要n的空间,而方法2中必定需要n空间,空间复杂度上也有优化)


代码
本题我使用了python作为编程环境,使用python中的字典构建hash表。

class Solution(object):
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        sumdict = {}
        for i in range(len(nums)):
            another_num = target - nums[i]
            if another_num in sumdict:
                return [sumdict[another_num],i]
            sumdict[nums[i]] = i

发布了7 篇原创文章 · 获赞 2 · 访问量 367

猜你喜欢

转载自blog.csdn.net/qq_37477357/article/details/89466886