首页 > 编程语言 >力扣1(java&python)-两数之和(简单)

力扣1(java&python)-两数之和(简单)

时间:2022-10-06 14:57:49浏览次数:64  
标签:map target nums python 力扣 int 哈希 enumerate 两数

题目:

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target  的那 两个 整数,并返回它们的数组下标。

你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。

你可以按任意顺序返回答案。

 

示例 1:

输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
示例 2:

输入:nums = [3,2,4], target = 6
输出:[1,2]
示例 3:

输入:nums = [3,3], target = 6
输出:[0,1]
 

提示:

  • 2 <= nums.length <= 104
  • -109 <= nums[i] <= 109
  • -109 <= target <= 109
  • 只会存在一个有效答案

进阶:你可以想出一个时间复杂度小于 O(n2) 的算法吗?

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/two-sum
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

哈希表:创建一个哈希表,从头开始遍历数组nums,对于每个值都判断哈希表中是否存在target-nums[i]这个key值,如果存在,这个说明找到了两个值,直接输出当前target-nums[i]所对应的位置value和当前的位置i,否则,将当前nums[i]和 i 加入到哈希表中。最终都没有找到,返回0。

注意:只需要一次遍历!!

两个元素x,y必然是一前一后出现的,如果存在符合条件的解,在遍历到x时,哈希表里没有符合的y,此时把x加入到了哈希表里,当遍历到y时,就可以在哈希表里找到对应的x了,所以只需要一次遍历。

java代码:

 1 class Solution {
 2     public int[] twoSum(int[] nums, int target) {
 3         //创建一个哈希表
 4         Map<Integer, Integer> map = new HashMap<>();
 5         for(int i = 0; i < nums.length; i++){
 6             //如果哈希表中存在target-nums[i],则获取它的下标
 7             if(map.containsKey(target - nums[i])){
 8                 return new int[]{map.get(target - nums[i]), i};
 9             }
10             //否则,把当前值存入哈希表中
11             map.put(nums[i], i);
12         }
13         return new int[0];
14     }
15 }

 python3代码:

1 class Solution:
2     def twoSum(self, nums: List[int], target: int) -> List[int]:
3         map = {}
4         for i,num in enumerate(nums):
5             if target - num in map:
6                 return [map[target - num], i]
7             map[num] = i

小知识:

python中的enumerate()函数:

enumerate()函数用于将一个可遍历的数据对象(如列表,元组或者字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。

语法:

enumerate(sequence, [start=0])
# sequence 一个序列、迭代器或其他支持迭代对象
# [start=0] 下标起始返回值

例如:

nums = [2,6,9]
for t in enumerate(nums):
    print(t)
for index,num in enumerate(nums):
    print(index,num)
print(list(enumerate(nums)))
print(tuple(enumerate(nums)))

#  输出结果
(0, 2)
(1,6)
(2, 9)
0 2
1 6
2 9
[(0, 2), (1, 6), (2, 9)]
((0, 2), (1, 6), (2, 9))

 

标签:map,target,nums,python,力扣,int,哈希,enumerate,两数
From: https://www.cnblogs.com/liu-myu/p/16757585.html

相关文章

  • Python: Factory Method Pattern
     #Python3.9#工厂方法模式FactoryMethodPatternfrom__future__importannotationsfromabcimportABC,abstractmethodimportpygame#pipinstallpyg......
  • 利用摄像头拍照并保存照片的程序(python实现,含UI界面)
    摘要:许多情况下我们需要用到摄像头获取图像,进而处理图像,这篇博文介绍利用pyqt5、OpenCV实现用电脑上连接的摄像头拍照并保存照片。为了使用和后续开发方便,这里利用pyqt5......
  • python基础--基本概念
    1.脚本的文件格式  脚本名.py  eg:hello.py2.脚本结构  大概三部分,脚本头+导入部分+业务模块  每一块都是非必须的,按需填写即可;    为了书写规范,一般......
  • 功能 python
    1.获取变量类型a=1type(a)2.格式化字符串a=input()b="Iam{},andIamstudyingPythoninNowcoder!".format(a)print(b)3.控制小数的位置a=3.1415926b="{:.2f}".......
  • C++ 和 Python 的赋值操作 (等号“=“) 的区别
    C++和Python的赋值操作("=")的区别C++的赋值操作总是默认执行拷贝拷贝出来的副本与原来变量的地址不同除非是指针拷贝给指针的浅拷贝才会指向相同地址autoa=b;改变......
  • python 疫情监控系统
    ​随着新型冠状病毒肺炎(CoronaVirusDisease2019,COV⁃ID-19,简称“新冠肺炎”)的爆发,在当今世界格局愈发“地球村”的背景下,受疫情影响,对人们的正常生活和全球经济形成一......
  • 了解Python
    文章目录前言一、Python是什么?二、如何学习Python1.先学习其构架,再探究细节2.夯实基础,方有进阶之路三、结语 前言如何学习编写第一个程序,我相信每一......
  • python记录日志神器- loguru库
    写了这么多年的Python,我一直都是使用Python自带的logging模块来记录日志,每次需要写一些配置将日志输出到不同的位置,设置不同日志输出格式,或者将日志进行分文件和压缩......
  • python+selenium做ui自动化测试用法必会
    python+selenium做ui自动化测试用法必会一、前言大家都知道,基于Web端的测试的基础框架是需要Selenium做主要支撑的,这里边给大家介绍下Web测试核心之基于Python的Sele......