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 -- 两数之和Ⅰ的更多相关文章

  1. 【数据结构】Hash表简介及leetcode两数之和python实现

    文章目录 Hash表简介 基本思想 建立步骤 问题 Hash表实现 Hash函数构造 冲突处理方法 leetcode两数之和python实现 题目描述 基于Hash思想的实现 Hash表简介 基本思想 ...

  2. LeetCode两数之和

    LeetCode 两数之和 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是 ...

  3. leetcode两数之和go语言

    两数之和(Go语言) 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复 ...

  4. leetcode 两数之和 python

      两数之和     给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 1 ...

  5. leetcode - 两数之和Ⅳ 输入BST(653)

    题目描述:给定一个二叉搜索树和一个目标结果,如果 BST 中存在两个元素且它们的和等于给定的目标结果,则返回 true. 解题思路:根据二叉搜索树的特点,对二叉搜索树进行中序遍历可以得到一个从小到达排 ...

  6. leetcode 两数之和 II - 输入有序数组

    给定一个已按照升序排列 的有序数组,找到两个数使得它们相加之和等于目标数. 函数应该返回这两个下标值 index1 和 index2,其中 index1 必须小于 index2. 说明: 返回的下标值 ...

  7. Leetcode 两数之和 (散列表)

    给定一个整数数组和一个目标值,找出数组中和为目标值的两个数. 你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用. 示例: 给定 nums = [2, 7, 11, 15], target ...

  8. LeetCode两数之和-Python<一>

    下一篇:LeetCode链表相加-Python<二> 题目:https://leetcode-cn.com/problems/two-sum/description/ 给定一个整数数组和一 ...

  9. leetCode:twoSum 两数之和 【JAVA实现】

    LeetCode 两数之和 给定一个整数数组,返回两个数字的索引,使它们相加到特定目标. 您可以假设每个输入只有一个解决方案,并且您可能不会两次使用相同的元素. 更多文章查看个人博客 个人博客地址:t ...

随机推荐

  1. JuJu团队11月28号工作汇报

    JuJu团队11月28号工作汇报 JuJu   Scrum 团队成员 今日工作 剩余任务 困难 于达 解决了数据接口的bug 生成generator形式, 并用熟悉Julia处理数据的方法 处理数据步 ...

  2. python_os 的知识点

    1. os.getcwd() #获得当前路径 2. os.listdir(path) #列出path路径下的所有目录名和文件名包括后缀 3. os.mkdir(path) #在path创建一个目录 4 ...

  3. Mac 配置代码高亮 Git状态显示

    Mac 一个为开发者量身定做的笔记本,分享给大家希望能帮助大家配置一个好的开发环境,好的开发环境才有好的心情Code. 首先进入到Home到目录一般默认打开的都是Home,如果不是输入 cd ~ 回车 ...

  4. Linux 安装gcc g++

    Linux版本: cat /proc/version Linux version 3.10.0-693.11.6.el7.x86_64 (mockbuild@x86-041.build.eng.bos ...

  5. SpringMVC核心

    DispatcherServlet是前端控制器设计模式的实现,提供Spring Web MVC的集中访问点,而且负责职责的分派,与spring IoC容器无缝集成. 主要用作职责调度工作,本身主要用于 ...

  6. ROS大型工程学习(二) 怎么阅读大型工程

    基本思路是由点到面,由浅到深. 1.首先从launch文件入手. 文件中会看到比如: <node ns="> <rosparam command="load&qu ...

  7. 永久免费云服务器搭建国内Moon服务加速ZeroTier

    ZeroTier One本身的服务器都在国外访问速度很慢.可以通过搭建国内Moon服务加速解决连接慢的问题. 但是需要有固定外网IP的服务器,可以注册sanfengyun账号申请免费云服务器. 下面是 ...

  8. 联系我们地图坐标展示js

    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=6d88 ...

  9. opencv+python实时人脸检测、磨皮

    import numpy as np import cv2 cap = cv2.VideoCapture(0) face_cascade = cv2.CascadeClassifier("d ...

  10. MyBatis 关联查询的实现:一对多

    有2个实体:用户.订单,一个用户可以拥有多个订单,同时这多个订单属于一个用户,即一对多. user_tb: order_tb: 在“多”的一方(order)添加“一”的一方(user)的主键(user ...