算法-两数之和
1.题目描述
https://leetcode.cn/problems/two-sum/
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标
示例 1:
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1]
难度: 简单
2.解法
方法一: 暴力枚举法
思路:
1.选择数组中第一个数(i=0)作为初始值,遍历剩下的数(j=1,j=2,j=3...j=len(nums)-1),若nums[i]+nums[j] == target则返回
2.选择数组中第二个数(i=1)作为初始值,遍历剩下的数(j=2,j=3...j=len(nums)-1),若nums[i]+nums[j] == target则返回
3.选择数组中第i个数作为初始值,遍历剩下的数(j=i+1,j=i+2...j=len(nums)-1),若nums[i]+nums[j] == target则返回
4.综上,代码如下
class Solution(object):
def twoSum(self, nums, target):
for i in range(len(nums)):
for j in range(i + 1, len(nums)):
if nums[i] + nums[j] == target:
return [i, j]
时间复杂度O(N*N) 空间复杂度O(1)
方法二:哈希表
思路:
在方法一中使用了双层循环遍历列表的方式因此时间复杂度较高,而哈希表查找的时间复杂度是O(1),将方法一中遍历j查找target-i的方式换成从哈希表中查找,代码如下
class Solution(object):
def twoSumHash(self, nums, target):
remainHash = {}
for i in range(len(nums)):
if target - nums[i] in remainHash:
return [i, remainHash[target - nums[i]]]
remainHash[nums[i]] = i
时间复杂度O(N) 空间复杂度O(N)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
2018-05-08 Django-Ajax