Leetcode -- 两数之和Ⅰ
1. 两数之和
题目描述:给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标。
示例:给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1]
解题思路:
(1)暴力破解:解题的关键是diff=target-num1,寻找diff是否也在列表中。
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
length = len(nums)
for i,value in enumerate(nums):
diff = target - value
j = i+1
while j < length:
if nums[j] == diff:
return [i,j]
j = j+1
运行时间1000多ms,考虑优化哈
(2)排序 + 首尾指针查找:首先对列表进行排序,记录下列表中各元素排序后所对应的位置,但是不改变原列表。
例如[3,2,5] 经过sorted函数得到[1,0,2]
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
sort_list = sorted(range(len(nums)),key=lambda x:nums[x]) #对于nums中的元素按升序进行排序
start = 0
end = len(nums)-1
while start < end:
add_up = nums[sort_list[start]] + nums[sort_list[end]]
if add_up == target:
return([sort_list[start],sort_list[end]])
elif add_up < target:
start += 1
elif add_up > target:
end -= 1
运行时间36ms,速度还不错
这里要注意的问题是: A. sorted()函数的用法 sorted(iterable, /, *, key=None, reverse=False)
B. lambda匿名函数 key=lambda x:nums[x] 表示按nums[x]升序排列。
e.g. [3,2,5,4] sort_list[1,0,3,2]即sort_list中是按照nums中的元素从小到大排序的下标列表。
(3)利用哈希表求解: 列表中的每一个元素对应的diff都是不同的,则可以利用哈希表(字典)的思想,以diff为键值(key),而键值对应的value为具体下标。这样通过搜索哈希表就可以寻找到目标。
循环遍历原列表中的每个元素,如果该元素在哈希表中,则返回[该元素的下标,该元素在哈希表中对应的value]
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:
hashmap = {} #记录每一个位置与target的差值
for i,value in enumerate(nums):
if value in hashmap:
return([hashmap.get(value),i])
hashmap[target - value] = i
运行时间68ms
Leetcode -- 两数之和Ⅰ的更多相关文章
- 【数据结构】Hash表简介及leetcode两数之和python实现
文章目录 Hash表简介 基本思想 建立步骤 问题 Hash表实现 Hash函数构造 冲突处理方法 leetcode两数之和python实现 题目描述 基于Hash思想的实现 Hash表简介 基本思想 ...
- LeetCode两数之和
LeetCode 两数之和 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是 ...
- leetcode两数之和go语言
两数之和(Go语言) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复 ...
- leetcode 两数之和 python
两数之和 给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 1 ...
- leetcode - 两数之和Ⅳ 输入BST(653)
题目描述:给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 解题思路:根据二叉搜索树的特点,对二叉搜索树进行中序遍历可以得到一个从小到达排 ...
- leetcode 两数之和 II - 输入有序数组
给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值 ...
- Leetcode 两数之和 (散列表)
给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...
- LeetCode两数之和-Python<一>
下一篇:LeetCode链表相加-Python<二> 题目:https://leetcode-cn.com/problems/two-sum/description/ 给定一个整数数组和一 ...
- leetCode:twoSum 两数之和 【JAVA实现】
LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...
随机推荐
- JuJu团队11月28号工作汇报
JuJu团队11月28号工作汇报 JuJu Scrum 团队成员 今日工作 剩余任务 困难 于达 解决了数据接口的bug 生成generator形式, 并用熟悉Julia处理数据的方法 处理数据步 ...
- python_os 的知识点
1. os.getcwd() #获得当前路径 2. os.listdir(path) #列出path路径下的所有目录名和文件名包括后缀 3. os.mkdir(path) #在path创建一个目录 4 ...
- Mac 配置代码高亮 Git状态显示
Mac 一个为开发者量身定做的笔记本,分享给大家希望能帮助大家配置一个好的开发环境,好的开发环境才有好的心情Code. 首先进入到Home到目录一般默认打开的都是Home,如果不是输入 cd ~ 回车 ...
- Linux 安装gcc g++
Linux版本: cat /proc/version Linux version 3.10.0-693.11.6.el7.x86_64 (mockbuild@x86-041.build.eng.bos ...
- SpringMVC核心
DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,与spring IoC容器无缝集成. 主要用作职责调度工作,本身主要用于 ...
- ROS大型工程学习(二) 怎么阅读大型工程
基本思路是由点到面,由浅到深. 1.首先从launch文件入手. 文件中会看到比如: <node ns="> <rosparam command="load&qu ...
- 永久免费云服务器搭建国内Moon服务加速ZeroTier
ZeroTier One本身的服务器都在国外访问速度很慢.可以通过搭建国内Moon服务加速解决连接慢的问题. 但是需要有固定外网IP的服务器,可以注册sanfengyun账号申请免费云服务器. 下面是 ...
- 联系我们地图坐标展示js
<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=6d88 ...
- opencv+python实时人脸检测、磨皮
import numpy as np import cv2 cap = cv2.VideoCapture(0) face_cascade = cv2.CascadeClassifier("d ...
- MyBatis 关联查询的实现:一对多
有2个实体:用户.订单,一个用户可以拥有多个订单,同时这多个订单属于一个用户,即一对多. user_tb: order_tb: 在“多”的一方(order)添加“一”的一方(user)的主键(user ...