「力扣」1. 两数之和

力扣1. 两数之和——《解题者:力扣解题之路》 前言:不同于某些OJ,力扣第一题对初学者不是很友好,初次看到它,可能一时想不到思路——但须知万事开头难,走出第一步,即相当于成功一半—— 而:我将为你认认真真地解开它ヾ(◍°∇°◍)ノ゙ ... 阅读详情

1. 两数之和

「力扣」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], 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) 的算法吗?

题解

「暴力解法」

两层循环,第一层循环定义指针i指向每一个元素,第二层循环定义指针j指向每一个元素,比较nums[i] + nums[j]和target,如果相等则退出循环,返回[i, j]。

class Solution {
    public int[] twoSum(int[] nums, int target) {
       for (int i = 0; i < nums.length - 1; i++) { //如果是最后一个元素,则无需再向后比较,所以此处i < nums.length - 1
            for (int j = i + 1; j < nums.length; j++) {
                if (nums[i] + nums[j] == target) {
                    return new int[]{i, j};
                }
            }
        }
        return new int[0];
    }
}

时间复杂度是O(n²),空间复杂度是O(1)。

提交看下:

提交记录

时间复杂度太高。

「Hash表」

我们可以借助hash表,以一个具体的用例来解答解释。

hash解法

使用for循环:

  1. 当i = 0的时候,计算target - nums[i] = 7在hash表中有没有,此时肯定是没有的,那么就将数据存储到hash表中,KV如何存储呢?K=(nums[i] = 2),value=i。
  2. 当i = 1的时候,同样计算target - nums[i] = 2,再次查看hash表中有没有2,此时hash表中有2,所以通过key=2,获取hash中对应的value,与当下的i做成一个数组,得到[0, 1]。
class Solution {
    public int[] twoSum(int[] nums, int target) {
        // map存储`[nums[i], i]
        Map<Integer, Integer> map = new HashMap<>();
        for (int i = 0; i < nums.length; i++) {
            int v = target - nums[i];
            // 去hash表中查询是否存在v
            if (map.containsKey(v)) {
                return new int[]{map.get(v), i};
            }
            map.put(nums[i], i);
        }
        return new int[0];
    }
}

提交:

运行结果

可以看到时间上确实是快了,但是空间占用多了点,这是典型的空间换时间的方法,空间复杂度是O(n),时间复杂度也是O(n)。

《从零学会 CST 仿真全流程》专栏简介 本专栏系统讲解CSTPCBStudio与MWSStudio在高速PCB仿真中的应用,涵盖SI/PI仿真全流程。重点介绍CSTPCBStudio用于板级信号完整性分析,CSTMWS用于3D高频电磁仿真,以及电缆、低频、多物理场等配套工具。课程以实战为导向,通过USB3.1、LPDDR4等案例,手把手教学软件操作与工程应用,适合硬件工程师、EMC工程师及电子专业学生学习。内容注重实操,弱化理论,帮助快速掌握仿真核心技能。 阅读详情

相关推荐

BUUCTF--[OGeek2019]babyrop

才学习了基本的ROP流程,到处找题练,不过也没做出来几道题,以这道32位的题作为例题吧。 这道题是BUUCTF上pwn练习题里的[OGeek2019]babyrop。 代码审计 老规矩先checksec一下: 没有canary保护,nx保护开启排除shellcode可能性,FULL RELEO为地址随机化。 观察主函数,先设定了一个闹铃,到时间就会强制退出程序,解除闹铃的方法在上一篇博客中提到过了, 这道题中闹铃函数依然对我们解题起不到什么干扰作用。 主函数的思路大概是:生成一个随机数,把这个随机数作为

N1rvana的博客 6005

【算法入门】力扣题:1. 两数之和 经典算法题“两数之和”Java和JavaScript力扣经典题:两数之和新手入门全解析【新手入门】LeetCode两数之和:Java & JavaScript双语

在这篇博客中,我们讨论了力扣题目“两数之和”的解法。我们首先介绍了题目的基本要求,然后分析了两种解法:暴力解法和哈希表解法。最后,我们提供了 Java 和 JavaScript 的实现代码。通过使用哈希表,我们能够将时间复杂度从 (O(n^2)) 降低到 (O(n)),这使得我们的算法在处理大规模数据时更加高效。希望这篇博客能帮助你更好地理解这个问题及其解法!如果你有任何问题或想法,欢迎在评论区留言讨论。

南北极之间 982

Cadence 17.4 PSpice仿真555定时器输出方波

这里利用555定时器组成多谐振荡器产生1Hz的方波并用PSpice仿真其输出的方波波形。555定时器是一种广泛应用的中规模集成电路。根据其内部组成的不同,可分为双极型(555B)和CMOS型(555C)两类。两种类型的定时器各有所长。双极型定时器具有较大的驱动能力,其输出电流可达200mA,可直接驱动发光二级管、扬声器、继电器等负载。而CMOS型定时器的输入阻抗高、功耗低。

tj_nonstoper的博客 1万+

「力扣」第 1 题:“两数之和”代码(哈希表)

「力扣」第 1 题:“两数之和”代码 方法一:暴力解法 Java 代码: public class Solution { public int[] twoSum(int[] nums, int target) { int len = nums.length; for (int i = 0; i < len - 1; i++) { ...

李威威的博客 1255

TikTok Shop API密钥获取与PHP实战对接指南

本文详细介绍了TikTok Shop API密钥的获取流程与PHP实战对接方法。从开发者后台创建应用、获取核心的API密钥开始,逐步解析OAuth 2.0授权机制,并提供了完整的PHP封装类示例,涵盖签名生成、API调用、令牌刷新及错误处理,帮助开发者快速实现与TikTok Shop的数据对接与自动化操作。

weixin_29300241的博客 401

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3013

【LeetCode热题100】1.两数之和

两数之和 题号:1 难度:简单 标签:数组、哈希表 描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] (1)第一次解题代码,暴力解法(Java) class Solution {

mosoup的博客 382

基于YOLOv8的城市违建识别系统:从数据集构建到UI界面实现

YOLOv8是Ultralytics公司于2023年推出的最新一代YOLO(You Only Look Once)系列目标检测算法。更高效的骨干网络设计改进的锚框机制更精确的损失函数支持分类、检测、分割等多任务YOLOv8特别适合像违建识别这样的实时检测任务,能够在保持高精度的同时实现快速推理。

YOLO 674

「LeetCode」1.两数之和

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

xuzhougeng blog 387

Vue - 萤石云监控 ezuikit 视频实例销毁方案,解决使用stop方法无法销毁EZUIKit实例或销毁后依然占用内存并且监控画面依然有声音问题(解决页面多个监控摄像头画面同时播放,翻页或关闭页

vue2,vue3,萤石,监控摄像头,萤石云销毁视频实例,退出页面销毁,stop销毁原视频流,占用内存怎么办,销毁后视频依旧在后台播放有声音,销毁视频播放器,页面上有多个视频画面怎么销毁某一个,stop方法不生效怎么办,浏览器非常卡,dom销毁,ezuikit-js萤石云播放器Vue中使用beforeDestory销毁播放器实例,调用萤石云ezuikit-js的视频对象销毁,vue使用萤石云监控视频录像回放,不销毁实例会出现离开页面后依旧有监控声音并且占内存问题,不好使,页面崩了,崩溃,视频监控太多,没有用

🏆 前端领域优质创作者 1万+

05 - matlab m_map地学绘图工具基础函数 - 设置比例尺指北针

本篇介绍下m_map中添加指北针(m_northarrow)、比例尺(m_ruler)和进行比例缩放(m_scale)的函数及其用法 。提供了 示例以便参考,罗列了 各函数可设属性。希望对绘图的你有所帮助。

weixin_43339605的博客 1945

LeetCode_1“两数之和”

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

A_D_I_D_A_S的博客 199

强化学习优化多目标冲突推理的决策过程设计

1. 背景介绍 强化学习(Reinforcement Learning,RL)作为机器学习的一个重要分支,近年来在计算机科学和人工智能领域取得了显著的进展。其核心思想是通过试错来学习最优策略,从而在复杂的环境中实现目标。然而,在多目标冲突推理(Multi-Objective Conflict Reasoning,MOCR)问题上,强化学习面临着诸多挑

AI天才研究院 1510

「LeetCode刷题」1. 两数之和

题目1. 两数之和 https://leetcode-cn.com/problems/two-sum/ 题目 解题思路 方法1:暴力枚举 /** * Note: The returned array must be malloced, assume caller calls free(). */ int* twoSum(int* nums, int numsSize, int target, int* returnSize){ int *ans = (int *)malloc(sizeof(

写代码的仓颉 1070

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

力扣(leetcode)题一

力扣第一题

lpf12的博客 226

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

「leetcode」1. 两数之和:map等候多时了

哈希法中只用数组和set还是不够的!

代码随想录 472

「LEETCODE-1」两数之和

题目简介: 解决思路: 可借助“互补”概念来解决,遍历数组,当前元素如果不在词典镜像词典内,则将target-num 以及num对应的下标存入镜像中;如果在镜像中,则将当前下标与镜像中与当前数字“互补”的数字的下标返回。 代码: class Solution: def twoSum(self, nums: List[int], target: int) -> List[int]: ...

Gpwner的博客 593

力扣热题100实战 | 第1期:两数之和——从暴力到哈希,你真的理解“空间换时间”吗?

本文是力扣热题100实战系列的开篇之作,深入剖析两数之和这道经典面试题。作为LeetCode第1题,两数之和是所有算法刷题者的入门必修课,也是大厂面试的高频考点。本文不仅提供了暴力枚举和哈希表优化两种Java解法,更还原了从“暴力”到“最优”的完整思考过程,帮助读者建立算法优化的思维框架

LinuxSRE、k8s、运维、DBA、大数据 689

key map 模糊查找_「leetcode」1. 两数之和:map等候多时了

哈希法中只用数组和set还是不够的!第1题. 两数之和给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。「示例:」给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以...

weixin_29083373的博客 105

力扣-1. 两数之和

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

Jack魏 590

(C++)Leetcode狂刷200题——标签“数组篇--简单难度10道 #1两数之和”

一、数组篇–简单难度(出现频率降序) #1 两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/

electrical_engineer0的博客 205

力扣1-两数之和

在函数返回后,原本的局部数组所在内存被释放回收,那么返回的指针就变成了悬空指针,指向的是无效的内存区域,后续再去访问就会出现错误(比如出现未定义行为,可能导致程序崩溃等)。可以保证在函数返回后,所指向的数组内容依然有效(因为其生命周期贯穿整个程序运行阶段),使得调用者能够正确获取到在函数内部计算并存储好的满足条件的两个下标的值(存储在。因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。你可以假设每种输入只会对应一个答案,并且你不能使用两次相同的元素。整数,并返回它们的数组下标。

2303_79462608的博客 541

LeetCode刷题笔记第1题:两数之和

LeetCode刷题笔记第一题:两数之和 两数之和 给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。 你可以按任意顺序返回答案。 示例 1: 输入:nums = [2,7,11,15], target = 9 输出:[0,1] 解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。 示例 2: 输入:nums = [3,2,4], tar

qq_29787929的博客 234

Leetcode刷题【1.两数之和】

力扣第一题,两数之和。

Richard_Brown的博客 234

leetcode-1、两数之和(c++)

leetcode-1、两数之和 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。 示例 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 方法一:暴力法 class Solution { public: vector<int> twoSum(vector<int>& nums,

weixin_42395736的博客 503

两数之和

两数之和 给定一个整数数组 nums 和一个整数目标值 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,

qq_43413774的博客 210
下一篇: 「力扣」9. 回文数
「已注销」
博客等级 码龄3年 128粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值