Leetcode1 两数之和 python两种方法实现

embedded/2025/3/6 0:52:07/

python_0">Leetcode1 两数之和 python两种方法实现

文章目录

    • Leetcode1 两数之和 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]

提示:

  • 2 <= nums.length <= 10^4
  • -10^9 <= nums[i] <= 10^9
  • -10^9 <= target <= 10^9
  • 只会存在一个有效答案

分析:给定一个目标数值,需要返回和为目标数值的两个数的下标,而且答案只有一个。即对于a+b = target, 有且只有一个解。

方法一:枚举法(暴力解法)

对于一个数组[c1,c2,c3,c4,c5], 可以一组一组的判断,即(c1,c2),(c1,c3),(c1,c4),(c1,c5),

(c2,c3),(c2,c4),(c2,c5)

(c3,c4),(c3,c5),

(c4,c5)

即枚举法。

python">class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""n = len(nums) # 获取数组的长度for i in range(n):for j in range(i+1,n):if(nums[i]+nums[j] == target):return [i,j]return []

时间复杂度O(n^2), 空间复杂度O(1), 因为只使用了3个临时变量,n, i,j.

分析:时间复杂度很高,空间复杂度很低。如何能够降低时间复杂度,一种思路是用空间换时间

方法二:用空间换时间。

我们还是来看枚举法:

(c1,c2),(c1,c3),(c1,c4),(c1,c5),

(c2,c3),(c2,c4),(c2,c5)

(c3,c4),(c3,c5),

(c4,c5)

大部分时间花在了寻找第二个数上。有一个基本的观察是:如果第二个数与第一个数的和为目标数值,那么目标数值减去第二个数一定存在于数组中。

快速查找数值的结构是哈希集合或者哈希表,python中对应的结构是dict.

第一遍遍历的时候,如果当前数为答案中的第二个数,则target-当前数 则一定位于当前数之前的数组成的哈希集合中。
使用一个叫做dict的数据结构,键为数,值为当前数的索引。

python">class Solution(object):def twoSum(self, nums, target):""":type nums: List[int]:type target: int:rtype: List[int]"""hashtable = dict()for i, num in enumerate(nums):if(target - num in hashtable):return [i, hashtable[target-num]]hashtable[num]= i

时间复杂度 O(n), 空间复杂度O(n)

结果:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

链接:

https://leetcode.cn/problem-list/array/

从这一期leetcode开始,我会经常回来看我的博客,如果博主们觉得哪里看不懂,欢迎随时在评论区提出。

刷Leetcode就如同刷象棋路边摊一样,最开始刷的时候,觉得某一个象棋的路数好奇妙,刷着刷着回过头来看时发现那个招数在自己的眼中变得没那么令人惊讶了,变得稀松平常了。


http://www.ppmy.cn/embedded/170341.html

相关文章

【Vue CLI脚手架开发】——2.ref属性

文章目录 前言一、ref属性二、使用步骤1.实现代码2.结果展示 前言 Vue 的 ref 属性是框架中用于直接访问 DOM 元素或子组件实例的核心特性&#xff0c;在模板中标记元素或子组件&#xff0c;通过 this.$refs 获取其引用&#xff0c;支持直接操作 DOM 或调用子组件方法。 一、r…

threejs:用着色器给模型添加光带扫描效果

第一步&#xff1a;给模型添加光带 首先创建一个立方体&#xff0c;不进行任何缩放平移操作&#xff0c;也不要set position。 基础代码如下&#xff1a; 在顶点着色器代码里varying vec3 vPosition;vPosition position;获得threejs自动计算的顶点坐标插值&#xff08;也就…

力扣1594. 矩阵的最大非负积

力扣1594. 矩阵的最大非负积 题目 题目解析及思路 题目要求返回从左上到右下的最大非负积&#xff0c;本题和简单图dp的区别就是出现了负数 若grid[i][j] > 0则和简单图dp一致&#xff0c;dp[i][j] max(dp[i-1][j],dp[i][j-1]) * grid[i][j] 若grid[i][j] < 0则分两…

自学微信小程序的第十天

DAY10 1、调用wx.login()方法获取用户登录凭证code,然后将它发送给开发者服务器。 表43:wx.login()方法的常用选项 选项 类型 说明 timeout number 超时时间,单位为毫秒 success function 调用成功的回调函数 fail function 调用失败的回调函数 complete function 调用结束…

XMOS推出“免开发固件方案”将数字接口音频应用的开发门槛大幅降低

使用该套“免开发固件方案”可将开发周期从三个月缩短到14天 中国深圳&#xff0c;2025年3月——全球领先的软件定义系统级芯片&#xff08;SoC&#xff09;开发商XMOS宣布&#xff1a;公司已推出了“免开发固件方案”&#xff0c;可实现中高端音频解决方案的0代码开发。与传统…

MySQL执行更新SQL流程

目录 1 redo log 2 binlog 3 Update执行逻辑 1 redo log InnoDB引擎特有日志MySQL的WAL&#xff08;Writing Ahead logging&#xff09;技术&#xff0c;预写式日志&#xff0c;先写日志再写磁盘当有一条记录需要更新时&#xff0c;InnoDB引擎就会先把记录写在redo log日志中&a…

代码随想录算法训练营day49(0217)

单调栈的收尾&#xff0c;接雨水很常考 1.接雨水 题目 42. 接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 1&#xff1a; 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&…

Collab-Overcooked:专注于多智能体协作的语言模型基准测试平台

2025-02-27&#xff0c;由北京邮电大学和理想汽车公司联合创建。该平台基于《Overcooked-AI》游戏环境&#xff0c;设计了更具挑战性和实用性的交互任务&#xff0c;目的通过自然语言沟通促进多智能体协作。 一、研究背景 近年来&#xff0c;基于大型语言模型的智能体系统在复…