leetcode刷题 1 两数之和 Two Sum(简单) Python Java

力扣leetcode top100 1.两数之和 题目:给定一个整数数组 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], targe... 阅读详情

原题如下

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

 

第一种解法:暴力方式   复杂度是O(n^2)

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        for i in range(len(nums)):
            for j in range(len(nums) - i):
                if nums[i] + nums[j] == target:
                    #因为题目说明一个解, 这里直接返回
                    return [i, j]
 
if __name__ == "__main__":
    a = Solution()
    print(a.twoSum([8,2,5,2,5,11], 10))


这里思考的是, 因为我们是要对比一个数组中的两个数之间的合的关系, 两次遍历同一个数组复杂度可以通过字典创建索引来解决其中的一次遍历问题

见代码:  复杂度就是O(n) + O(1)*O(N) == 2O(n) = O(N)

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        dictNums = {}
        for i in range(len(nums)):
            #这里循环同一个数组,创造字典,以便第二次循环对比的时候,能够O(1)级别的查找
            dictNums[nums[i]] = i
 
        for i in range(len(nums)):
            if dictNums.get(target-nums[i], 0) != 0 and i != dictNums[target-nums[i]]:
                #因为题目说条件是假设一个解,所以直接返回
                return [i, dictNums[target-nums[i]]]
        return False
 
if __name__ == "__main__":
    a = Solution()
    print(a.twoSum([8,2,5,2,5,11], 10))


 

第二种方法就从O(n^2)降到了O(n) , 但是发现上面第二种方式是否可以再优化一下呢?   可否把两次循环放在一次循环里面呢?

答案是肯定的, 看下面的数组假如我们要找和为10的两个数, 如果循环到了第三个数, 其实对于那么只需要前三个数创建的字典与后面的数进行匹配,  也就是说一次把数组倒置创建索引形成字典是存在一些浪费的, 因为有可能提前找到答案

1    2    5    2    9    6    3
那么在一次改进, 第三种方法:

class Solution:
    def twoSum(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        dictNums = {}
        for i in range(len(nums)):
            if target-nums[i] in dictNums:
                #因为题目说条件是假设一个解,所以直接返回
                return [dictNums[target-nums[i]], i]
            else:
                dictNums[nums[i]] = i
        return False
 
if __name__ == "__main__":
    a = Solution()
    print(a.twoSum([8,2,5,2,5,11], 10))


虽然复杂度还是同样的O(n) 但是比上面的算法代码上更加简洁, 且节约了构建索引的部分循环次数
 

以下是Java版本

/**
 * 时间复杂度为O(n^2)
 *
 */
public class TwoSum {
	   public int[] twoSum(int[] nums, int target) {
	        int indices[] = new int[2];  //定义一个数组,只有两个元素
                //两次遍历数组
	        for(int i = 0; i < nums.length - 1; i++){
	            for(int j = i+1; j < nums.length; j++){
                       //判断相加结果是否为题目所求
	               if((i < j) && (nums[i] + nums[j] == target)){
	                   indices[0] = i;
	                   indices[1] = j;
	               }
	            }
	        }
	        return indices;
	     }
}

 

Leetcode刷题-(1~5)-Java+Python+JavaScript 算法题是程序员的基本功,也是各个大厂必考察的重点,让我们一起坚持写算法题吧遇事不决,可问春风,春风不语,即是本心。我们在我们能力范围内,做好我们该做的事,然后相信一切都事最好的安排就可以啦,慢慢来,会很快,向前走,别回头。 阅读详情

相关推荐

SAP 货币类型和公司代码的货币设置

货币类型分为公司代码和集团货币,一般FI 10类型和集团货币 30,事务代码是8KEM; 设置货币类型的事务代码是OB22 在S/4 1809版本里编辑功能统合到事务代码FINSC_LEDGER 中了,这里集中了分类账和公司代码的设置; 设置多账簿的币种(会出现在BSEG和FAGLFLEXA表中) 汇率维护在TCURR表中,可通过BAPI_EXCHANGERATE_GETDETAIL函数获取。 CO货币的事务代码是成本控制范围货币:OKKP ,一般设置为货币码20和30; 另外, SCC4设置集团货币,

RichardYang2020的博客 1万+

LeetCode #1:Two Sum(简单题)

原题 Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the sam...

个人技术资料整理 599

企业级 Agent 在 K8s 上的运行模型

Kubernetes├── Agent Orchestrator(控制面)├── Agent Runtime Pods(执行面)├── Graph DSL(流程层)├── Tool Services(能力层)K8s(调度)+ Graph(流程)+ Agent(决策)+ Tool(执行)+ Guard(治理)

一起修行,不孤单。这里有编程语言、开发工具、学习方法论和踩坑笔记。用简单的话说复杂的事,陪你从小白到进阶。周更干货,欢迎一起成长! 1172

游戏夜读 | Two Sum问题的八个解

文/良宵听雨。授权“游戏夜读”发表。 打开LeetCode找到一个小游戏 \1. Two Sum Easy Given an array of integers, returnindicesof the two numbers such that they add up to a specific target. You may assume that each input would haveexactlyone solution, and you may not use thesa...

游戏夜读 233

ksz9031 mmd读取不了_ZYNQ. LwIP.PHY.KSZ9031RNX

新一块板子米尔科技的z-turn 使用的PHY芯片是Micrel的 KSZ9031RNX 而不是zedboard上的Marvell的。直接使用lwip的echo server demo时会报错 , 无法启动。在网上找了很久终于找到几篇关于这个问题的文章。修改PHY的驱动xemacpsif_physpeed.c文件该芯片的PHY Identifier 是 0x0022bsp设置中修改参数以提速MEM...

weixin_39626298的博客 924

Localizing LabVIEW Application to Different Languages

本文探讨了LabVIEW应用程序的多语言本地化实现方案。文章首先分析了LabVIEW对多语言的支持现状,指出其默认仅支持ANSI编码,对Unicode支持有限,且仅适配中英法德日韩六种语言。然后重点介绍了JKISimpleLocalization工具包的使用方法,该工具能导出/导入JSON词典文件,实现界面语言的实时切换。文章还结合实际工程案例,分析了该方案的局限性:部分控件不可翻译、切换速度较慢(33个界面需50秒)、小语种支持不足等。最后提供了完整的应用流程和工具包附件,包括词典文件转换工具和工程案例。

2301_80383260的博客 1409

LeetCode1.twosum [简单] ——怀疑人生的开始刷第一道题

LeetCode的第一题就把我打败了 题目描述:1.two sum 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nu...

Vermouth_Su的博客 193

软件工程案例教程·韩万江【课后习题】

!!!!

weixin_57858263的博客 6419

【LeetCode】1. Two Sum(简单难度)

解法一 两重循环,遍历所有情况看相加是否等于目标和,如果符合直接输出。 class Solution { public int[] twoSum(int[] nums, int target) { int[] ans = new int[2]; for(int i=0;i<nums.length;i++){ for(int j=i+1;j<nums.length;j++){ if(nums[i]...

17902的博客 278

手把手教你用Python分析OpenFAST仿真结果:pyDatView处理.out文件与数据可视化技巧

本文详细介绍了如何使用Python中的pyDatView工具分析OpenFAST仿真结果,包括数据加载、质量检查、时域与频域分析、多工况对比及自动化报告生成。通过优化技巧和可视化方法,帮助工程师高效处理.out文件,提升风机性能分析的准确性和效率。

weixin_29311017的博客 183

逻辑漏洞:水平越权、垂直越权靶场练习

水平越权和垂直越权是组织中常见的管理问题,指的是员工在组织中所拥有的权力和责任超出其职位所应具备的范围。 水平越权是指员工在同一级别的职位上超越了其同事的权力和责任范围,通常表现为某个员工在团队中承担了过多的任务或权力,导致其他同事感到不公平或不满。 垂直越权则是指员工在组织中超越了其职位等级的权力和责任范围,通常表现为员工在没有得到上级批准的情况下做出决策或行动,可能会导致组织内部的混乱和冲突。

qq_68163788的博客 2470

【Leetcode之路 | Java & Python】两数之和(暴力枚举&哈希表)

刷题是一件日积月累的事情,我们在刷题中要保持良好习惯,让每一道题发挥最大作用!索引: 一、说在前面 二、两数之和 2.1、暴力枚举 2.1.1 python实现 2.1.2 java实现 3.1 哈希表(Hash table) 3.1.1 python实现 3.1.2 Java实现 今日份推荐 —— 牛客网.........

计算机魔术师的blog 3400

【DRAM存储器五十七】LPDDR5介绍--read DQ training和WCK DQ training

简述LPDDR5训练中的读写DQ训练

highman110的博客 522

【LeetCode】修炼之路-0001-Two Sum(两数之和)【python】【简单】

计算机科学作为一门实践性极强的学科,代码能力的培养尤为重要。当前网络上有非常多优秀的前辈分享了LeetCode的最佳算法题解,这对于我们这些初学者来说提供了莫大的帮助,但对于我这种缺乏编程直觉的学习者而言,这往往难以消化吸收。(为什么别人就能想出这么优雅,高级的实现!我就只会暴力呢)我浅薄地认为,只有理解算法设计的思路,才能真正掌握编程技巧。鉴于此,本系列试图呈现另一种LeetCode修炼之路——从基本原理出发,一步步拓展思路,逐级深化难度。

crazyjinks的博客 1808

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

leetCode刷题之两数之和

算法训练之两数之和 最近开始在leetcode上开始进行刷题,并且将自己的刷题记录过程记录在博客中。 该算法的具体内容如下 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 首先看到题目是否有排序的条件,如果已经是排序好的一组数字,就可以直接利用两个指针分别指向最大数和最小数与目标数字进行比较的算法,如下所示: //这里假定数组是按升序排列 public class Solution{ public int sum(int [

qq_41440287的博客 206

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

LeetCode 1 — Two Sum(C++ Java Python)

题目: Given an array of integers, find two numbers such that they add up to a specific target number. The function twoSum should return indices of the two numbers such that they add up to the target,

龙之梦 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

1. (Two Sum)两数之和

题目 Given an array of integers nums and an integer target, return indices of the two numbers such that they add up to target. You may assume that each input would have exactly one solution, and you may not use the same element twice. You can return the answ

OIqng的博客 5487

Apache Beam CdapIO 集成指南:用 Beam 管道驱动 CDAP 批处理与流式插件

本指南聚焦 Apache Beam 仓库中 `beam-sdks-java-io-cdap` 模块(即 CdapIO),讲解如何借助 Beam 统一编程模型直接复用 CDAP(Cask Data Application Platform)生态中的 SaaS 数据插件,包括 Hubspot、Salesforce、ServiceNow、Zendesk 的 Batch Source / Batch Si

gitblog_00317的博客 627

LeetCode之(1)两数之和(Two Sum)

LeetCode之001.两数之和/Two Sum题目描述题目分析代码实现C++JavaPython 题目描述 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 题目分析 使用HashM

euy的博客 288

Leetcode刷题系列(python/java)之1. 两数之和(two-sum)

本文为本人leetcode刷题之路2.0,将相关思考记录在此博客。欢迎批评指正。 题目1.二级目录三级目录 1. 解题思路: ①暴力解法(双指针) ②hashmap (给面试官一定要最好给最优解) 解法1:暴力解法(双指针法). 时间复杂度O(n^2),空间复杂度O(1) python class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: # 解法1:暴力解法(双指针法) .

weixin_41483599的博客 461

【LeetCode】1. Two Sum 两数之和

关键词:two sum, 两数之和,题解,leetcode, 力扣,python, c++, java

负雪明烛 3192

两数之和:从暴力枚举到哈希表,掌握刷题思维与算法优化的底层逻辑

在数据结构与算法的学习中,查找是最基础也最高频的操作之一。从线性遍历到哈希表,背后的核心是时间复杂度与空间复杂度的权衡。哈希表(散列表)通过散列函数将数据映射到固定位置,让平均查找时间降至常数级别,是解决“判断某元素是否存在”这类问题的高效工具。在实际工程中,从索引构建到缓存设计,这种“以空间换时间”的思路无处不在。LeetCode第1题“两数之和”正是理解这一思想的最佳入口:从暴力枚举的O(n²)出发,逐步推导到两遍哈希表再到一遍哈希表的O(n)最优解法,过程中不仅厘清了哈希冲突、扩容代价与不同语言的实现

weixin_33805992的博客 398

Leetcode1 两数之和 C++,Java,Python

Leetcode1 两数之和 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/two-sum/ 博主Github:https://github.com/GDUT-Rp/LeetCode 题目: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会...

Rp的博客 237

LeetCode 1:两数之和(Two Sum)解法汇总

文章目录暴力解法/我的解法两遍哈希表一遍哈希表 暴力解法/我的解法 这种办法很容易理解,就不赘述了,直接上代码 首先上java blic int[] twoSum(int[] nums, int target) { for (int i = 0; i < nums.length; i++) { for (int j = i + 1; j < nums.lengt...

Utopiabuntu的博客 494

1.两数之和(Two Sum)

1.两数之和 Two Sum题解暴力法复杂度分析PythonJava(待完成)两次哈希表复杂度分析PythonJava(待完成)一次哈希表复杂度分析PythonJava(待完成) 题解 暴力法 两次循环 第一次循环,对于数组中每一个数 nums[i] 进行遍历 第二次循环,从当前数的下一个数 nums[j] ,其中 j>i 继续遍历,判断nums[i]+num[j] 是否等于target. ...

朱师傅的博客 419

[Leetcode]第一题:两数之和

Information Problem Description 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums...

永春的优快云博客 3231
上一篇: VS2015配置darknet项目时遇到MSB3721的解决办法
下一篇: leetcode刷题 7 反转整数 Reverse Integer(简单) Python Java
SpringRolls
博客等级 码龄9年 73粉丝 129原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值