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 ...
随机推荐
- 看完本文,Essay写作再也不需要凑字数
很多同学都说过自己写论文的时候出现“词穷”的情况,无奈只能靠“胡编乱造”来凑字数写出开头段,这其实是大家的阅读量没有达到要求.但不能因为出现这种情况就对自己的论文不负责任,否则你的论文分数可能就不会对 ...
- 利用ZXing.Net生成和识别二维码
ZXing.Net:ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库. github:https://github.com/micjahn/ZXing.Net 直接将字符 ...
- Mysql多对多关系的查询
1.创建user表 2.创建gateway表 3.创建user_gateway表 4.创建device表 5.创建gateway_device表 6.创建一个实体类 public class Devi ...
- http 请求code状态码
状态码 含义 100 客户端应当继续发送请求.这个临时响应是用来通知客户端它的部分请求已经被服务器接收,且仍未被拒绝.客户端应当继续发送请求的剩余部分,或者如果请求已经完成,忽略这个响应.服务器必须在 ...
- oracle和mysql的一些区别
1.分页查询语句的区别 2.字符串拼接的区别,oracle不支持三个字符串的拼接,mysql支持三个字符串的拼接,在mybatis中,连接的是oracle数据库,字符串的拼接需要如下语句: <s ...
- 文本编辑器vim/vi——命令模式
一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. vim指令: 指令:vim (vim是一款 ...
- idea 将java 项目 打包成jar包
记录一下,防止忘记.ps : 请忽略这个是web项目 1.idea 打包jar包 (1)首先打开Project Structure,选中Artifacts (2)点击绿色加号,选中jar ,然后选中f ...
- BeanUtils使用将一个对象拷贝到另外一个对象
这里的BeanUtils是BeanUtils是org.springframework.beans.BeanUtils,和org.apache.commons.beanutils.BeanUtils是有 ...
- Zookeeper 在 Kafka 中的作用
https://www.jianshu.com/p/a036405f989c 待整理...
- oracle获取排序第一的数据
一:按照某字段排序(时间,总数等),获取第一条 select a.* FROM ( select * from ( select t.*,row_number() over(partition by ...