leetcode刷题:两数之和

leetcode刷题:两数之和

题目:
给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。
开始思路:
只是做出来,但是没有考虑只对应一个答案,两个for循环不容易解决重复问题,
 1 a = [2,4,6,3]
 2 b = 9
 3 def twoSum(nums, target):
 4     lens = len(nums)
 5     for i in range(lens):
 6         for j in range(i+1,lens):
 7             if nums[i]+nums[j] == target:
 8                print(i, j)
 9                break
10         break

这样在列表的第一个第二个值重复时候会出错

改正思路:只循环一个j,和值减去当前循环值去寻找差值,得到唯一性:

 1 a = [2,4,6,3]
 2 b = 9
 3 def twoSum(nums, target):
 4     lens = len(nums)
 5     for i in range(1, len(nums)):
 6         temp = nums[:i]
 7         if (target - nums[i]) in temp:
 8             j = temp.index(target - nums[i])
 9             print(j, i)
10 
11 
12 twoSum(a, b)

需要学习注意的是:

range 的范围是从0到i-1

列表的下标范围是从0开始对应元素

a[:1]表示a[0],列表的第一个元素

进一步学习:

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中
enumerate(sequence, [start=0])
  • sequence — 一个序列、迭代器或其他支持迭代对象。
  • start — 下标起始位置。
 1 def two_sum(nums, target):
 2     """这样写更直观,遍历列表同时查字典"""
 3     dct = {}
 4     for i, n in enumerate(nums):
 5         #nums自动识别为字典,nums中下标为键,值为列表对应值
 6         cp = target - n
 7         #寻找和减去第一个的数的差值
 8         if cp in dct:
 9             print([dct[cp], i])
10         else:
11             dct[n] = i
12             #返回的一种写法
13 
14 
15 two_sum(a, b)

引申算法:哈希算法

 1 用字典模拟哈希求解
 2 字典记录num1和num2的值和位置
 3 enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
 4 def twoSum(nums, target):
 5     hashmap={}
 6     #存储的内容是键值对(key-value)映射
 7     for ind,num in enumerate(nums):
 8         hashmap[num] = ind
 9     for i,num in enumerate(nums):
10         j = hashmap.get(target - num)
11         if j is not None and i!=j:
12             return [i,j]
最后两个引用出处
作者:lao-la-rou-yue-jiao-yue-xiang
链接:https://leetcode-cn.com/problems/two-sum/solution/xiao-bai-pythonji-chong-jie-fa-by-lao-la-rou-yue-j/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2771.html原文链接:https://javaforall.net

(0)
上一篇 2021年2月26日 下午6:37
下一篇 2021年2月26日 下午6:37


相关推荐

  • Claude Code本地化部署教程:零成本打造最强内网AI开发助手

    Claude Code本地化部署教程:零成本打造最强内网AI开发助手

    2026年3月16日
    2
  • pip安装详解

    pip安装详解pip 是 python 的包管理工具 python2 7 python3 4 以上的版本都已经集成了该工具 我们可以用 pipversion 命令确认是否安装 如果未安装 pip 的 请往下看 下载进入 https pypi org project pip 选择红框中的文件下载图 windows 下安装下载完成后解压得到我们用 CMD 进入该目录下 输入 pythonsetup pyinstall 命令进行安装码字不易废话两句 有需要 python 学习资料的或者有技术问题交流 点击 即可如果是第

    2025年6月12日
    6
  • 【Unity学习笔记】Canvas Scaler组件

    【Unity学习笔记】Canvas Scaler组件声明 此篇文章是个人学习笔记 并非教程 所以内容可能不够严谨 可作参考 但不保证绝对正确 如果你发现我的文章有什么错误 非常欢迎指正 谢谢哦 UI 自适应在学习 CanvasScaler 组件之前 先来了解一下 UI 自适应 UI 自适应就是让我们可以不对每种分辨率的屏幕上都设计一种 UI 布局 而只需要在开发的时候设计一种 UI 布局 就可以让 UI 在不同分辨率的屏幕上都能尽量正常的显示 这将会节省巨大的工作量 而这一次要学习的 CanvasScaler 组件就是用来快速的实现 UI 自适应功能的组件 CanvasScal

    2026年3月16日
    2
  • Spring之事务传播行为

    Spring之事务传播行为一 概念首先简单了解一下 Spring 中事务传播行为是什么 听起来很高端 但是真正用起来的时候 稍有不慎 就会让自己陷入困境之中 所以在使用之前 我们必须要十分耐心认真的学习它 从名字理解起来 事务传播行为 既然为传播就肯定发生在两个实体之间 否则单个实体又如何发生行为呢 通俗点讲就是 一个巴掌拍不响 下面进入正规话题 事务传播行为主要用来描述由某一个事务传播行为修饰的方法被嵌套进另一个方法的事务中 该事务如何传播 这个概述可能不好理解 换句话就是当一个事务方法被另一个事务方法调用时 这个事务方法应

    2026年3月26日
    2
  • layui 树形表格 treeTable使用详细指南,不能折叠解决办法

    layui 树形表格 treeTable使用详细指南,不能折叠解决办法最近在写一个商品分类管理的功能,本来想用layui的树形组件来写,但发现layui原生的tree只能展示title,而分类的其他字段无法展示,这就有点不适用了,无意中看到一位大神自定义写的一个树形表格组件,正好满足我的要求,特此将使用方法以及其中遇到的一些坑记录下来。。。首先看下treeTable的演示地址项目地址好了,如果看完演示到这里你觉得正好符合你的功能要求,就可以继续往下看了,虽…

    2022年5月4日
    105
  • Flex上传文件

    Flex上传文件

    2022年1月24日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号