您的位置:首页 > 房产 > 家装 > 镇江疫情风险区域_创业计划书(大学生版)_怎么自己创建一个网页_网站收录排名

镇江疫情风险区域_创业计划书(大学生版)_怎么自己创建一个网页_网站收录排名

2025/7/24 23:10:30 来源:https://blog.csdn.net/m0_53244394/article/details/146426130  浏览:    关键词:镇江疫情风险区域_创业计划书(大学生版)_怎么自己创建一个网页_网站收录排名
镇江疫情风险区域_创业计划书(大学生版)_怎么自己创建一个网页_网站收录排名

题目描述

在这里插入图片描述

解题思路

先说一种很容易想到的暴力解法

暴力解法的思路很简单,就是遍历数组,对于每一个元素,都去遍历数组中剩下的元素,判断是否有两个元素的和等于目标值,如果有,就返回这两个元素的下标。

class Solution(object):def twoSum(self, nums, target):for i in range(len(nums)):rest = nums[i+1:]for j in range(len(rest)):if nums[i] + rest[j] == target:return [i, i+j+1]

尝试提交,通过,时间复杂度为O(n^2)

在这里插入图片描述

显然上面的方法不够优雅,再说一种优雅的解法

暴力解法是把每一个数都遍历,然后返回下标,但是这个遍历的过程显然是太过于耗时了,那么我们能不能使用一个数据结构把已经遍历过的数据存储起来,然后往后遍历的时候,求和的时候直接去除先前数据的下标呢?

有的,有的兄弟!我们可以使用字典来存储,当然,你也可以叫他哈希表(HashMap),其实在Python中,这就是字典,为什么叫他哈希表呢,这是因为这个存储思想就是基于操作系统中哈希存储的。

那么我们可以这样来操作:我们遍历所有的数据,以数据的值为键,以它的下标为值,存储到哈希表中,然后每次都判断目标的值和当前所遍历的值的差是否在哈希表中,如果在,直接返回当前数的下标和哈希表中数的下标,否则继续。

开始手搓!

class Solution(object):def twoSum(self, nums, target):num_dict = {}for i in range(len(nums)):if target - nums[i] in num_dict.keys():return [i, num_dict[target-nums[i]]]else:num_dict[nums[i]] = i

尝试提交,通过,时间复杂度为O(n)
在这里插入图片描述

总结

可以看到,执行时间从2172ms降到了3ms,效率提升了700倍!自然就变得优雅了。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com