LeetCode - 两数之和
题目信息
源地址:两数之和
给定一个整数数组 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 <= 10^3-10^9 <= nums[i] <= 10^9-10^9 <= target <= 10^9- 只会存在一个有效答案
实现逻辑
暴力枚举
最先想到的逻辑肯定是使用双层循环暴力查找。
当然,采用这种方式的时间复杂度是 O(n2),空间复杂度是 O(1),实际效率是非常地低。
package cn.fatedeity.algorithm.leetcode; | |
public class TwoSum { | |
public int[] answer(int[] nums, int target) { | |
for (int i = 0; i < nums.length; i++) { | |
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(1) 的特性,就可以一次循环快速得到结果。
最终,时间复杂度降到 O(n),空间复杂度则变成 O(n)。
题目信息
源地址:两数之和
给定一个整数数组 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 <= 10^3-10^9 <= nums[i] <= 10^9-10^9 <= target <= 10^9- 只会存在一个有效答案
实现逻辑
暴力枚举
最先想到的逻辑肯定是使用双层循环暴力查找。
当然,采用这种方式的时间复杂度是 O(n2),空间复杂度是 O(1),实际效率是非常地低。
package cn.fatedeity.algorithm.leetcode; | |
public class TwoSum { | |
public int[] answer(int[] nums, int target) { | |
for (int i = 0; i < nums.length; i++) { | |
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(1) 的特性,就可以一次循环快速得到结果。
最终,时间复杂度降到 O(n),空间复杂度则变成 O(n)。
package cn.fatedeity.algorithm.leetcode; | |
import java.util.HashMap; | |
public class TwoSum { | |
public int[] answer(int[] nums, int target) { | |
HashMap<Integer, Integer> hashMap = new HashMap<>(); | |
for (int i = 0; i < nums.length; i++) { | |
int diff = target - nums[i]; | |
if (hashMap.containsKey(diff)) { | |
return new int[]{hashMap.get(diff), i}; | |
} | |
hashMap.put(nums[i], i); | |
} | |
return new int[0]; | |
} | |
} |
package cn.fatedeity.algorithm.leetcode; | |
import java.util.HashMap; | |
public class TwoSum { | |
public int[] answer(int[] nums, int target) { | |
HashMap<Integer, Integer> hashMap = new HashMap<>(); | |
for (int i = 0; i < nums.length; i++) { | |
int diff = target - nums[i]; | |
if (hashMap.containsKey(diff)) { | |
return new int[]{hashMap.get(diff), i}; | |
} | |
hashMap.put(nums[i], i); | |
} | |
return new int[0]; | |
} | |
} |
题目信息
源地址:两数之和
给定一个整数数组 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 <= 10^3-10^9 <= nums[i] <= 10^9-10^9 <= target <= 10^9- 只会存在一个有效答案
实现逻辑
暴力枚举
最先想到的逻辑肯定是使用双层循环暴力查找。
当然,采用这种方式的时间复杂度是 O(n2),空间复杂度是 O(1),实际效率是非常地低。
package cn.fatedeity.algorithm.leetcode; | |
public class TwoSum { | |
public int[] answer(int[] nums, int target) { | |
for (int i = 0; i < nums.length; i++) { | |
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(1) 的特性,就可以一次循环快速得到结果。
最终,时间复杂度降到 O(n),空间复杂度则变成 O(n)。
package cn.fatedeity.algorithm.leetcode; | |
import java.util.HashMap; | |
public class TwoSum { | |
public int[] answer(int[] nums, int target) { | |
HashMap<Integer, Integer> hashMap = new HashMap<>(); | |
for (int i = 0; i < nums.length; i++) { | |
int diff = target - nums[i]; | |
if (hashMap.containsKey(diff)) { | |
return new int[]{hashMap.get(diff), i}; | |
} | |
hashMap.put(nums[i], i); | |
} | |
return new int[0]; | |
} | |
} |
相关文章:
LeetCode - 两数之和
题目信息 源地址:两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出和为目标值 target 的那两个整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不…...
Python 小型项目大全 31~35
三十一、猜数字 原文:http://inventwithpython.com/bigbookpython/project31.html 猜数字是初学者练习基本编程技术的经典游戏。在这个游戏中,电脑会想到一个介于 1 到 100 之间的随机数。玩家有 10 次机会猜出数字。每次猜中后,电脑会告诉玩…...
他又赚了一万美金
有一些学员真的挺能干的,收了一万刀,感到欣慰,毕竟在国外lead这条路,有很多人被骗,也有很多人赚钱。 但是大部分人跟着某一些所谓的大佬,最后自己却不动手操作。 从一开始怕跟我学习,到最后选…...
企业工程项目管理系统+spring cloud 系统管理+java 系统设置+二次开发
工程项目各模块及其功能点清单 一、系统管理 1、数据字典:实现对数据字典标签的增删改查操作 2、编码管理:实现对系统编码的增删改查操作 3、用户管理:管理和查看用户角色 4、菜单管理:实现对系统菜单的增删改查操…...
教你使用Apache搭建Http
Apache2默认采用的是80端口号,因此直接通过公网ip或域名就能访问。现实中,很多服务器本身就部署了许多其它服务,80端口号往往被占用,因此就需要将Apache2改成其它访问端口。 修改端口,首先需要修改/etc/apache2/ports…...
ZooKeeper+Kafka+ELK+Filebeat集群搭建实现大批量日志收集和展示
文章目录一、集群环境准备二、搭建 ZooKeeper 集群和配置三、搭建 Kafka 集群对接zk四、搭建 ES 集群和配置五、部署 Logstash 消费 Kafka数据写入至ES六、部署 Filebeat 收集日志七、安装 Kibana 展示日志信息一、集群环境准备 1.1 因为资源原因这里我就暂时先一台机器部署多…...
数据结构初阶 - 总结
-0- 数据结构前言 什么是数据结构 什么是算法 数据结构和算法的重要性-1- 时间复杂度和空间复杂度 👉数据结构 -1- 时间复杂度和空间复杂度 | C 算法效率 时间复杂度大O的渐进表示法eg 空间复杂度 常见复杂度对比OJ 消失的数组 轮转数组-2- 顺序表 与 链表 &am…...
代码随想录算法训练营第四十四天-动态规划6|518. 零钱兑换 II ,377. 组合总和 Ⅳ (遍历顺序决定是排列还是组合)
如果求组合数就是外层for循环遍历物品,内层for遍历背包。 如果求排列数就是外层for遍历背包,内层for循环遍历物品。 求物品可以重复使用时,最好是用一维数组,会比较方便。二维数组不想思考了,二维还是用在01背吧吧。…...
wma格式怎么转换mp3,4种方法超快学
其实我们在任何电子设备上所获取的音频文件都具有自己的格式,每种格式又对应着自己的属性特点。比如wma就是一种音质优于MP3的音频格式,虽然很多小伙伴比较青睐于wma所具有的音质效果,但也不得不去考虑因wma自身兼容性而引起很多播放器不能支…...
【数据结构与算法】判定给定的字符向量是否为回文算法
题目: Qestion: 试写一个算法判定给定的字符向量是否为回文。 回文解释: 回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。 主要思路: 因为数据要求不是很严格并且是一个比较简单的…...
考研数二第十七讲 反常积分与反常积分之欧拉-泊松(Euler-Poisson)积分
反常积分 反常积分又叫广义积分,是对普通定积分的推广,指含有无穷上限/下限,或者被积函数含有瑕点的积分,前者称为无穷限广义积分,后者称为瑕积分(又称无界函数的反常积分)。 含有无穷上限/下…...
【论文总结】理解和减轻IoT消息协议的安全风险
理解和减轻IoT消息协议的安全风险介绍概述前置知识威胁模型MQTT IoT通信安全分析未授权的MQTT消息未授权的Will消息未经授权的保留消息MQTT会话管理故障未更新的会话订阅状态未更新的会话生命周期状态未经身份验证的 MQTT 身份客户端id劫持MQTT Topics的授权MQTT Topic不安全的…...
SpringBoot基础入门
一、概述 Spring Boot是一个开源的Java框架,它是基于Spring框架的基础之上创建的。Spring Boot可以帮助开发人员更快地创建Spring应用程序,并以最小的配置要求来运行它们。Spring Boot可以用于构建各种类型的应用程序,包括Web应用程序、RESTful API、批处理作业、消息传递应…...
jar 包与 war 包区别
1、war是一个web模块,其中需要包括WEB-INF,是可以直接运行的WEB模块;jar一般只是包括一些class文件,在声明了Main_class之后是可以用java命令运行的。 2、war包是做好一个web应用后,通常是网站,打成包部署…...
【数据结构:复杂度】时间复杂度
本节重点内容: 算法的复杂度时间复杂度的概念大O的渐进表示法常见时间复杂度计算举例⚡算法的复杂度 算法在编写成可执行程序后,运行时需要耗费时间资源和空间(内存)资源 。因此衡量一个算法的好坏,一般是从时间和空间两个维度来衡量的&…...
京东pop店铺订单导出
下载安装与运行 下载、安装与运行 语雀 特别提醒 只能导出已登录店铺的订单导出的收件人手机号是虚拟号 功能 主要是方便线下工厂发货的店主 所见即所得的导出自由选择导出项自由排序Excel导出列顺序导出过程中有进度提示,用户可以随时提前中止 什么是所见即所…...
论文阅读:Towards Stable Test-time Adaptation in Dynamic Wild World
今天阅读ICLR 2023 ——Towards Stable Test-time Adaptation in Dynamic Wild World Keywords:Test-time adaptation (TTA); 文章目录Towards Stable Test-time Adaptation in Dynamic Wild WorldProblem:motivation:Contributio…...
2022国赛27:Linux-1时间服务chrony配置
大赛试题内容: 3.利用chrony配置Linux-1为其他Linux主机提供时间同步服务。 解答过程: 安装chrony服务[root@cs1 ~]# yum -y install chrony 配置/etc/chrony.conf文件[root@cs1 ~]# vi /etc/chrony.conf 7行改为 server 10.10.70.101 iburst 23行改为 去掉#号 allow 1…...
Java——二维数组中的查找
题目链接 牛客在线oj题——二维数组中的查找 题目描述 在一个二维数组array中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二…...
Android 9.0 添加关机铃声功能实现
1.前言 在9.0的系统rom定制化开发中,在原生系统中,关于开机铃声和关机铃声是默认不支持的,系统默认支持开机动画和关机动画等功能,所以关于增加开机铃声和关机 铃声的相关功能,需要自己增加相关的关机铃声功能 2.添加关机铃声功能实现的核心类 frameworks\base\cmds\boo…...
Arm Cortex-A35 Cycle Model技术解析与SoC集成实战
1. Arm Cortex-A35 Cycle Model技术解析在SoC设计领域,虚拟平台验证已成为不可或缺的关键环节。作为Armv8-A架构中的能效比优化核心,Cortex-A35处理器通过Cycle Model提供了RTL级精度的硬件行为模拟能力。我在多个车载SoC项目中验证发现,其Cy…...
三维重建下半场,拼的全是底层基建实力!
三维重建已从算法创新竞赛正式迈入基础设施比拼新阶段,主流技术路线逐步收敛,单纯算法红利见顶,行业竞争核心转向数据、算力、平台、生态等底层综合能力。当下竞争不再只比模型效果,而是聚焦四大核心基建维度:采集传感…...
PromptCraft-Robotics:基于LLM的机器人任务规划与安全控制实践
1. 项目概述与核心价值最近在机器人编程和AI应用领域,一个名为“PromptCraft-Robotics”的项目在开发者社区里引起了不小的讨论。这个项目由微软开源,其核心目标直指一个困扰许多开发者和研究者的痛点:如何让大型语言模型(LLM&…...
基于HTML5 Canvas的轻量级图像标注库visual-annotator集成指南
1. 项目概述:一个为开发者打造的视觉标注利器如果你做过图像识别、目标检测或者任何需要处理大量图片标注的计算机视觉项目,那你一定对标注工具不陌生。从早期的LabelImg到后来的CVAT、Label Studio,工具的选择往往决定了你项目前期数据准备的…...
Linux系统调用观察与strace实战
Linux系统调用观察与strace实战很多 Linux 问题只靠日志和进程状态很难看清,尤其是在进程存在但无响应、命令卡住不动、文件访问异常或网络连接莫名失败时。此时,观察进程正在进行哪些系统调用,往往能快速揭示它卡在什么地方。中级阶段必须掌…...
大语言模型并行推理技术Hogwild! Inference解析
1. 大语言模型并行推理的技术挑战在传统的大语言模型推理过程中,文本生成采用的是严格的自回归方式,即每个token的生成都依赖于之前所有token的输出。这种串行模式虽然保证了生成的连贯性,但也带来了显著的性能瓶颈。以1750亿参数的GPT-3为例…...
FeFET时间域内存计算宏:突破AI边缘计算能效瓶颈
1. 项目概述:FeFET时间域内存计算宏的创新实现在人工智能和边缘计算蓬勃发展的当下,传统冯诺依曼架构面临着一个根本性挑战:数据在处理器和存储器之间的频繁搬运导致的高能耗和延迟瓶颈。这个问题在需要大量并行乘累加(MAC)运算的神经网络应用…...
Topit:macOS窗口置顶的终极解决方案,开源高效的多任务开发利器
Topit:macOS窗口置顶的终极解决方案,开源高效的多任务开发利器 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit Topit是一款专为macOS系统…...
Linux驱动开发:原子操作实现LED设备互斥访问
1. 项目概述:用原子操作给LED驱动加把“锁”在嵌入式Linux开发里,驱动开发是绕不开的一环。很多时候,一个硬件设备,比如一个简单的LED灯,可能会被多个用户空间的应用程序同时访问。想象一下,一个APP想开灯&…...
AI驱动Figma设计自动化:Claude插件实现自然语言到UI生成
1. 项目概述:当设计工具遇上AI助手最近在和一些资深UI/UX设计师朋友交流时,大家不约而同地提到了一个痛点:在Figma这类设计工具里,从概念到高保真原型的转化过程,依然充满了大量重复、机械的劳动。比如,我需…...
