《画解算法》1.两数之和【python实现】

简介: 《画解算法》1.两数之和【python实现】

正文


题目描述


给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。


你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。


你可以按任意顺序返回答案。


示例 1:


输入:nums = [2,7,11,15], target = 9

输出:[0,1]

解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。

示例 2:


输入:nums = [3,2,4], target = 6

输出:[1,2]

示例 3:


输入:nums = [3,3], target = 6

输出:[0,1]


问题分析


1.暴力求解


两层循环,外层循环枚举(或称作选中一个标杆),内层循环从枚举值之后开始遍历,计算两数的和是否等于target。如果找到了两个数,那么返回这两个数的下标。


for(int i = 0; i < n - 1; ++i) {
    for(int j = i + 1; j < n; ++j ) {
        if nums[i] + nums[j] == target
        ...
    }
}


暴力求解的算法时间复杂度为指数级,也就是O(n^2)


分析暴力求解,我们发现存在重复搜索的情况,也就是对数组中的部分数据搜索了多次。那如何只对数组中的数据搜索1次(或常数级),然后求解呢?


我们知道,寻找一个数是否存在,最快的方法是通过hash表,在O(1)的时间复杂度之内就可以判断是否存在某个数。


2.哈希表求解


可对数组遍历一次,然后将数据存入hash表,然后再遍历一次数组,查找 target - currentdata 是否存在hash表中,如果存在,那么我们就寻找到了两个数。 题目要求我们返回数组的下标,那么我们的hash表的key是数组元素的值,value是下标。


这种方法在最坏的情况下,对数组遍历了2次,也就是算法的时间复杂度是O(2n),去掉前导系数是O(n),虽然是相比暴力求解,算法的时间复杂度降低了,但是还有优化的空间。


在遍历数组并将数据放入hash表的同时,我们也可以find(target - currentdata)是否存在,如果存在那么就找到了满足条件的两个数。


find(9-4), 存在那返回这两个数的下标,如果不存在,那么将 4 放入hash表。


3.png


find(9-6), 存在那返回这两个数的下标,如果不存在,那么将 6 放入hash表。


2.png


在遍历到元素5的时候,我们find(9-5),找到了这两个数。


1.png


动画演示下这个过程


234.gif



代码实现


class Solution:
    def twoSum(self, nums: List[int], target: int) -> List[int]:
        hashtable = dict()
        for i, num in enumerate(nums):
            # ② map中查找是否有 target - curvalue的数据
            if target - num in hashtable:
                return [hashtable[target - num], i]
            # ① 数组中的每个数放入map中
            hashtable[nums[i]] = i
        return []
相关文章
|
8月前
|
算法 搜索推荐 JavaScript
基于python智能推荐算法的全屋定制系统
本研究聚焦基于智能推荐算法的全屋定制平台网站设计,旨在解决消费者在个性化定制中面临的选择难题。通过整合Django、Vue、Python与MySQL等技术,构建集家装设计、材料推荐、家具搭配于一体的一站式智能服务平台,提升用户体验与行业数字化水平。
|
8月前
|
存储 监控 算法
监控电脑屏幕的帧数据检索 Python 语言算法
针对监控电脑屏幕场景,本文提出基于哈希表的帧数据高效检索方案。利用时间戳作键,实现O(1)级查询与去重,结合链式地址法支持多条件检索,并通过Python实现插入、查询、删除操作。测试表明,相较传统列表,检索速度提升80%以上,存储减少15%,具备高实时性与可扩展性,适用于大规模屏幕监控系统。
242 5
|
9月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
442 26
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于D*算法的机器人路径规划(Python代码实现)
406 0
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于改进型A*算法的机器人路径规划(Python代码实现)
615 0
|
9月前
|
机器学习/深度学习 编解码 算法
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
【机器人路径规划】基于迪杰斯特拉算法(Dijkstra)的机器人路径规划(Python代码实现)
719 4
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
【机器人路径规划】基于A*算法的机器人路径规划研究(Python代码实现)
1141 4
|
9月前
|
机器学习/深度学习 算法 机器人
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
【机器人路径规划】基于深度优先搜索(Depth-First-Search,DFS)算法的机器人路径规划(Python代码实现)
433 3
|
8月前
|
机器学习/深度学习 算法 机器人
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
使用哈里斯角Harris和SIFT算法来实现局部特征匹配(Matlab代码实现)
382 8
|
8月前
|
机器学习/深度学习 算法 自动驾驶
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
基于导向滤波的暗通道去雾算法在灰度与彩色图像可见度复原中的研究(Matlab代码实现)
438 8

热门文章

最新文章

推荐镜像

更多