youlitaiGLZ的LeetCode刷题笔记1

本文探讨了在给定整数数组中寻找两数之和等于目标值的问题,提出并对比了三种解法:暴力解法、哈希表优化及单次循环优化,最后提供了Python代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.两数之和

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


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

题目解法:
1.首先想到暴力解法,两层循环遍历所有的数字组合情况,得到符合要求的一组解对应的数字下标组合。这种方法的时间复杂度为O(n2n^2n2),效率较低,有一定超时风险。空间复杂度为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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值