001两数之和

题意

给出一个数组和一个目标值,让你在数组中找出和为目标值的两个数,并且这两个数在数组中的下标(索引)不同。

示例

输入:nums=[2,7,11,15],target=9

输出:[0,1]

解释:因为nums[0]+nums[1]==9,返回[0,1]

分析

所谓的“暴力”,在算法领域表示“穷举、极低效率的实现”。主要源于这个英文单词(Brute-Force,暴力攻击)。

两层遍历,第一层确定第一个数,第二层确定第二个数,用一个加法运算就可以完成题目的要求。

classSolution{
//定义一个方法twoSum,接收一个整数数组nums和一个目标值target
publicint[]twoSum(int[]nums,inttarget){
//外层循环遍历数组中的每个元素
for(inti=0;i<nums.length;i++){
//内层循环从当前元素的下一个开始遍历
for(intj=i+1;j<nums.length;j++){
//检查当前选中的两个数之和是否等于目标值
if(nums[i]+nums[j]==target)
//如果等于目标值,返回这两个数的索引
returnnewint[]{i,j};
}
}

//如果遍历完数组都没有找到符合条件的两个数,则抛出异常
thrownewIllegalArgumentException("没有找到");
}
}

笔试如果遇到不太会的题,就暴力。不过两次遍历的时间复杂度是 。

时间复杂度,在算法领域是一个非常重要的概念,一个衡量算法执行时间随输入数据规模增长而增长的度量。在这个特定的 “两数之和” 问题的解法中,时间复杂度是由两层嵌套循环决定。

时间复杂度实在是太不理想,效率太低,在所有 Java 提交中只能击败不到 28% 的用户。

虽然击败了 33% 的 Java 选手,但是这样的算法时间复杂度和之前相比根本没有变化。

我们反推一下。

已知 i 和 target,那么target - i就是与 i 相配对的另一个数,我们只需要判断target - i是否在 i 之前出现过,如果出现过,那么这两个数就是我们要找的数。

那么问题来了,如何判断target - i是否在 i 之前出现过呢?

我们可以用一个 HashMap 来记录数组中的每一个元素,元素的索引作为哈希表的 key,元素本身作为 value,当发现target - i在哈希表中存在时,就可以直接返回这两个数的索引了。来看题解。

class Solution {
    //定义一个方法twoSum,接收一个整数数组nums和一个目标值target
    public int[] twoSum(int[] nums, int target) {
        //定义一个HashMap用于存储数组元素以及他的索引

        HashMap<Integer,Integer> map = new HashMap<>();
        //遍历数组中的每一个元素
        for(int i = 0 ;i<nums.length;i++){
            //计算与当前元素配对的元素
            int complement = target - nums[i];
            //检查HashMap中是否已经存在配对元素
           if(map.containsKey(complement)){
               //存在,就将两元素的下标进行返回
               return new int[]{i , map.get(complement)};
           }
           //将当前元素及其索引添加到哈希表中
           map.put(nums[i] ,i);

        }
       
throw new IllegalArgumentException("没找到");

    }
}

当输入是 nums = [2,7,11,15] 和 target = 9 时,我们来模拟上述解决 “两数之和” 的整个过程:

  1. 初始化哈希表:开始时,哈希表为空。
  2. 遍历数组
  3. 第一个元素(i = 0):nums[0] = 2
  4. 计算 complement = target - nums[i] = 9 - 2 = 7。
  5. 检查哈希表中是否存在 7。目前哈希表为空,所以不存在。
  6. 将 (2, 0) 加入哈希表(值为 2,索引为 0)。
  7. 第二个元素(i = 1):nums[1] = 7
  8. 计算 complement = 9 - 7 = 2。
  9. 检查哈希表中是否存在 2。是的,它存在,并且索引为 0。
  10. 找到匹配的一对元素:nums[0] = 2 和 nums[1] = 7,它们的和为 9。
  11. 返回这两个元素的索引 [1, 0]。

因此,对于输入 nums = [2,7,11,15] 和 target = 9,该题解会返回 [1, 0] 作为结果,表示 nums 数组中索引为 1 和 0 的元素相加得到目标值 9。

时间复杂度:

空间复杂度:

哦吼,这次结果就不一样了,打败了 71% 的选手,效果显著。

总结

对于本题,我们用到了 Java 中的一个普通 for 循环,和一个 HashMap,这两个都是 Java 中必须掌握的知识,如果你对这两个都不熟悉,那么你的 Java 基础还是不够扎实。

建议通过下面三个链接来学习:

  1. Java for 循环
  2. 数组
  3. HashMap

力扣链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

一步一个脚印

不积跬步无以至千里,不积小流无以成江海。LeetCode - 100天从算法小白到卷王正式启动了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/239599.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

苹果app应用ipa文件程序开发后如何运行到苹果iOS真机上测试?

在苹果应用程序开发过程中&#xff0c;将app安装于真机进行测试是一个不可或缺的步骤&#xff0c;它可以帮助你检测app在实际设备上的性能表现及存在的潜在问题。这篇文章将详细阐述如何将开发好的苹果app&#xff08;.ipa文件&#xff09;安装到真机上进行测试。 图片来源&…

DataFunSummit:2023年数据治理在线峰会-核心PPT资料下载

一、峰会简介 数据治理&#xff08;Data Governance&#xff09;是组织中涉及数据使用的一整套管理行为。由企业数据治理部门发起并推行&#xff0c;关于如何制定和实施针对整个企业内部数据的商业应用和技术管理的一系列政策和流程。 数据治理是一个通过一系列信息相关的过程…

【数据结构】堆的模拟实现

前言:前面我们学习了顺序表、单链表、栈、队列&#xff0c;今天我们就开始新的学习吧&#xff0c;今天我们将进入堆的学习&#xff01;(最近博主处于低谷期)一起加油吧各位。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:数据结构 &…

idea__SpringBoot微服务10——整合JDBC(新依赖)

整合JDBC 完整项目地址&#xff1a;一、创建一个项目二、idea配置连接mysql三、创建yaml数据库连接配置文件四、测试一下&#xff0c;没有问题五、增删改查————————创作不易&#xff0c;如觉不错&#xff0c;随手点赞&#xff0c;关注&#xff0c;收藏(*&#xffe3;︶…

P4 Qt基础控件——工具按钮toolButton(上)

前言 &#x1f3ac; 个人主页&#xff1a;ChenPi &#x1f43b;推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ &#x1f525; 推荐专栏2: 《Linux C应用编程&#xff08;概念类&#xff09;_ChenPi的博客-CSDN博客》✨✨✨ &#x1f33a;本篇简介 &#xff1a;这一章我们学一…

[湖湘杯 2021 final]MultistaeAgency

文章目录 题目是给了源码&#xff0c;我们先来看web的main.go package mainimport ("bytes""crypto/md5""encoding/json""fmt""io""io/ioutil""log""math/rand""net/http""o…

数据库系统相关概念

数据&#xff1a;描述事务的符号记录。 数据库(DB)&#xff1a;按一定的数据模型组织&#xff0c;描述和存储在计算机内的&#xff0c;有组织的&#xff0c;可共享的数据集合。 数据库管理系统(DBMS)&#xff1a;位于用户和操作系统之间的一层数据管理软件。主要功能包括&#…

iframe 与主应用页面之间如何互相通信传递数据

背景 当我们的Web页面需要复用现有网站的页面时&#xff0c;我们通常会考虑代码层面的抽离引用&#xff0c;但是对于一些过于复杂的页面&#xff0c;通过 iframe 嵌套现有的网站页面也是一种不错的方式&#xff0c;。目前我就职的项目组就有多个业务利用 iframe 完成业务的复用…

【实用】sklearn决策树怎么导出规则

目录 一、什么是决策树模型 0.1 什么是决策树 02.决策树模型有哪些 二、在sklearn中怎么训练一棵决策树 三、什么是决策树的规则 0.1决策树的决策规则 02. 决策树的决策规则是怎么存储的 四、怎么导出决策树的规则 4.1 导出决策树文本规则 4.2 导出可视化决策树 4.3…

C++入门【3-C++ 变量类型】

C 变量类型 变量其实只不过是程序可操作的存储区的名称。 在 C 中&#xff0c;有多种变量类型可用于存储不同种类的数据。 C 中每个变量都有指定的类型&#xff0c;类型决定了变量存储的大小和布局&#xff0c;该范围内的值都可以存储在内存中&#xff0c;运算符可应用于变量…

初学python的体会心得20字,初学python的体会心得2000

大家好&#xff0c;小编来为大家解答以下问题&#xff0c;学了python的心得体会200字&#xff0c;初学python的体会心得20字&#xff0c;现在让我们一起来看看吧&#xff01; 本学期&#xff0c;我们学习了杨老师的《python语言程序设计》这门课程&#xff0c;其实早在大一期间…

【RTOS学习】模拟实现任务切换 | 寄存器和栈的变化

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《RTOS学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f3c0;认识任务切换&#x1f3d0;切换的实质&#x1f3d0;栈中的内容&#x1f3d0;切…

数据可视化:解析跨行业普及之道

数据可视化作为一种强大的工具&#xff0c;在众多行业中得到了广泛的应用&#xff0c;其价值和优势不断被发掘和利用。今天就让我以这些年来可视化设计的经验&#xff0c;讨论一下数据可视化在各个行业中备受青睐的原因吧。 无论是商业、科学、医疗保健、金融还是教育领域&…

Vue2笔记

笔记 脚手架文件结构 ├── node_modules ├── public │ ├── favicon.ico: 页签图标 │ └── index.html: 主页面 ├── src │ ├── assets: 存放静态资源 │ │ └── logo.png │ │── component: 存放组件 │ │ └── HelloWorld.vue …

三天精通Selenium Web 自动化 - 如何找到元素

1. 什么是元素&#xff1f; 元素&#xff1a;HTML 元素 2. 定位方式解析 Selenium WebDriver 提供一个先进的技术来定位 web 页面元素。Selenium 功能丰富的API 提供了多个定位策略如:Name、ID、CSS 选择器、XPath 等等&#xff0c;如下图所示&#xff1a; 一般会用ID来定位…

Jmeter 测试 MQ 接口怎么做?跟我学秒变大神!

MQ(message queue)消息队列&#xff0c;是基础数据结构 先进先出 的一种典型数据结构。一般用来解决应用解耦&#xff0c;异步消息&#xff0c;流量削锋等问题&#xff0c;实现高性能&#xff0c;高可用&#xff0c;可伸缩和最终一致性架构。 MQ 主要产品包括&#xff1a;Rabb…

华清作业day45

头文件&#xff1a; #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTime> #include <QTimer> #include <QTimerEvent> #include <QTextToSpeech> QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass…

Unity_ET框架项目-斗地主_启动运行流程

unity_ET框架项目-斗地主_启动运行流程 项目源码地址&#xff1a; Viagi/LandlordsCore: ET斗地主Demohttps://github.com/Viagi/LandlordsCore下载项目到本地。 启动运行步骤&#xff1a; 下载目录如下&#xff1a; 1. VS&#xff08;我用是2022版VisualStudio&#xff09…

2023年第十届GIAC全球互联网架构大会-核心PPT资料下载

一、峰会简介 谈到一个应用&#xff0c;我们首先考虑的是运行这个应用所需要的系统资源。其次&#xff0c;是关于应用自身的架构模式。最后&#xff0c;还需要从软件工程的不同角度来考虑应用的设计、开发、部署、运维等。架构设计对应用有着深远的影响&#xff0c;它的好坏决…

Facebook广告投放常见错误

在进行Facebook广告投放时&#xff0c;很容易犯一些常见的错误。这些错误可能导致广告投资的浪费&#xff0c;影响广告效果并降低回报。本文小编讲一些常见的Facebook广告投放错误&#xff0c;以及如何避免它们。 1、不明确目标受众 广告的成功与否很大程度上取决于你选择的目…