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. docker安装并设置开机启动(Linux)

    docker 开机启动: systemctl enable docker 使用的linux系统为CentOS7.2 docker分为CE和EE版本,EE版本收费,一般我们使用CE版本就满足要求了 do ...

  2. 吴裕雄--天生自然java开发常用类库学习笔记:List接口

    import java.util.ArrayList ; import java.util.List ; import java.util.Collection ; public class Arra ...

  3. 这台计算机上缺少此项目引用的 NuGet 程序包。使用“NuGet 程序包还原”可下载这些程序包

    将项目复制到其地方的时候编译会报错,按照官网方法也不行,从网上查了一个有用的方法如下 打开CSPROJ文件.删除如下代码,  <Import Project="..\packages\ ...

  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. CentOS 6.8 32位 安装mysql8

    1.清理掉之前安装过的mysql rpm -qa | grep mysql mysql-libs-5.1.52-1.el6_0.1.x86_64 yum remove mysql-libs-5.1.5 ...

  6. spring-@ResponseBody返回时的编码处理

    下面是一个解决方案 @RequestMapping(value = "/queryall", method = GET, produces = "application/ ...

  7. 洛谷[Luogu] 普及村总结

    总结 简单的模拟 交叉模拟 排序 排序EX

  8. 4. Linux 集群安装

    1. 配置yum yum clean all yum makecache yum install wget 2.安装JDK (1) 将jdk-7u60-linux-i586.rpm通过WinSCP上传 ...

  9. css怎么让图片垂直左右居中?(外层div是浮动且按照百分比排列)

    一.原始的居中方法是把div换成table <div style="width: 500px; height: 200px; border: solid 1px red; text-a ...

  10. Tunning spark

    Data Serialization 对spark程序来说,可能会产生的瓶颈包括:cpu,网络带宽,内存 在任何分布式应用中数据序列化都非常重要,数据序列化带来的作用是什么?第一减少内存占用,第二减小 ...