【Hot100算法刷题集】哈希-01-两数之和(暴力枚举再优化,也不是哈希表的对手)

news2024/9/21 0:17:04

在这里插入图片描述

🏠关于专栏:专栏用于记录LeetCode中Hot100专题的所有题目
🎯每日努力一点点,技术变化看得见

题目转载

题目描述

🔒link->题目跳转链接
给定一个整数数组 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 2 2 <= nums.length <= 1 0 4 10^4 104
− 1 0 9 -10^9 109 <= nums[i] <= 1 0 9 10^9 109
− 1 0 9 -10^9 109 <= target <= 1 0 9 10^9 109
● 只会存在一个有效答案

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

解题思路及代码

[1]暴力枚举

一眼可以想到的就是让所有数字两两匹配,则我们可以使用两层for循环。但题目要求不能使用同一个元素,下方代码中如果内外层循环下标相等时,即表示同一个元素,需要跳过。
在这里插入图片描述

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); ++i)
        {
            for(int j = 0; j < nums.size(); ++j)
            {
                if(i == j) continue;	//表示同一个元素,跳过
                if(nums[i] + nums[j] == target) return {i, j};
            }
        }
        return {};
    }
};

对于两两匹配的算法来说,可以做出如下优化。上述实现代码中,当外循环为1时,它与2组合过了;但当外循环为2是,它又与1组合了1次,这出现了重复组合的情况,降低了效率。下图左侧还给出了其他重复比较的地方(2和1、3和1、3和2均出现了重复比较)。可将其优化为右侧方式,避免重复比较,提高效率。
在这里插入图片描述

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); ++i)
        {
        	// 不再与小于i的元素组合
            for(int j = i + 1; j < nums.size(); ++j)
            {
                if(nums[i] + nums[j] == target) return {i, j};
            }
        }
        return {};
    }
};

[2]哈希表

上述代码的效率是 O ( N 2 ) O(N^2) O(N2)的,效率比较低。我们可以借助于哈希表将时间效率提高为 O ( 1 ) O(1) O(1)。逻辑思路为:构建一个哈希表,其存储的元素为一个键值对,first域为具体的数值,second域为数值在nums数组的下标;当遍历到第index元素elem时,就在哈希表中查找target-elem,如果存在则返回target-elem的second域和index即可,若不存在则将当前元素的值和下标保存到哈希表中。逻辑思路图如下图所示。
在这里插入图片描述

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        unordered_map<int, int> m;
        for(int i = 0; i < nums.size(); ++i)
        {
            auto des = m.find(target - nums[i]);
            if(des != m.end())
            {
                return {des->second, i};
            }
            else
            {
                m[nums[i]] = i;
            }
        }
        return {};
    }
};

刷题使我快乐😭
文章如有错误,请私信或在下方留言😀

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

数据结构-栈、队列-相关练习

数据结构-栈、队列-相关练习 1.用队列实现栈2.用栈实现队列3.设计循环队列 1.用队列实现栈 用队列实现栈 题目概述&#xff1a;请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff09;的栈&#xff0c;并支持普通栈的全部四种操作&#xff08;push、top、pop 和 em…

《信息技术 云计算 边缘云通用技术要求》国家标准发布,九州未来参编

日前&#xff0c;2024年第17号国家标准公告发布&#xff0c;由全国信标委云计算标准工作组组织制定、九州未来作为行业专家单位参编的《信息技术 云计算 边缘云通用技术要求》国家标准正式获批发布。 边缘云作为云计算技术的有效补充和拓展&#xff0c;能够实现将云计算能力拓展…

信捷 XD PLC 数据寄存器的偏移量

信捷 XD PLC&#xff0c;数据寄存器 D 可用作软元件的偏移量&#xff0c;使得软元件的使用更加简单和便于控制。 格式&#xff1a;Dn[Dm]、Xn[Dm]、Yn[Dm]、Mn[Dm]等。 带偏移的位组成的字寄存器&#xff1a;DXn[Dm]表示 DX[nDm]。 带偏移的软元件&#xff0c;偏移量只可用软…

信息安全发展阶段与形式

关注这个证书的其他相关笔记&#xff1a;NISP 一级 —— 考证笔记合集-CSDN博客 0x01&#xff1a;信息安全的发展阶段 信息安全的发展阶段可以参照下面的思维导图&#xff1a; 0x02&#xff1a;我国的信息安全形式 2013 年&#xff0c;“棱镜门” 事件在全球持续发酵&#xf…

创业型公司如何实现数字化营销突破?

​在当今数字化时代&#xff0c;创业型公司可谓机遇与挑战并存。如何利用数字化营销手段实现突破&#xff0c;成为发展关键。 一、现状之困 资源有限&#xff1a;创业型公司资金、人力相对匮乏&#xff0c;难在传统营销上大笔投入。 品牌知名度低&#xff1a;新公司在市场上认…

【启明智显技术分享】探讨CAN总线相关知识以及Model3C 2路CAN的应用

一、 CAN总线相关知识 CAN总线概述 CAN&#xff08;Controller Area Network&#xff09;总线是一种高实时性、高可靠性和灵活性的串行通信协议&#xff0c;广泛应用于汽车和工业控制系统中。它由德国BOSCH公司开发&#xff0c;最高速率可达到1Mbps&#xff0c;具有强大的检错…

一台手机一个ip地址吗?手机ip地址泄露了怎么办

在数字化时代&#xff0c;‌手机作为我们日常生活中不可或缺的一部分&#xff0c;‌其网络安全性也日益受到关注。‌其中一个常见的疑问便是&#xff1a;‌“一台手机是否对应一个固定的IP地址&#xff1f;‌”实际上&#xff0c;‌情况并非如此简单。‌本文首先解答这一问题&a…

jQuery入门(七)jQuery实现按钮分页

一、分页案例分析 功能分析&#xff1a;使用分页插件&#xff0c;实现分页&#xff0c;效果如下图&#xff1a; 二、实现思路和代码 2.1&#xff09;页面实现分析 1.引入分页插件的样式文件和 js 文件。 2. 定义当前页码和每页显示的条数。(分页必备信息) 3. 调用查询数据…

京东API接口:商品详情页呈现商品的全网价格数据信息

如今&#xff0c;不少品牌企业为更好销售商品、塑造品牌&#xff0c;都开设了自己的自有商城。那么&#xff0c;对于这类自有商城平台&#xff0c;该如何做才能更好地提升商品的呈现效果呢&#xff1f;一个比较好的建议是&#xff0c;在电商商品详情界面上呈现出商品的全网价格…

IMU助力JAXA空间站机器人

近日&#xff0c;日本宇宙航空研究开发机构&#xff08;JAXA&#xff09;宣布&#xff0c;在国际空间站&#xff08;ISS&#xff09;实验舱“希望号”&#xff08;Kibo&#xff09;上部署的一款移动摄像机器人将采用Epson M-G370系列惯性测量单元&#xff08;IMU&#xff09;。…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——10.继承

1.继承的概念及定义 1.1继承的概念 继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允许程序员在保 持原有类特性的基础上进行扩展&#xff0c;增加功能&#xff0c;这样产生新的类&#xff0c;称派生类。继承呈现了面向对象 程序设计的层…

华为OD机试真题 - 最长连续子序列 - 双指针(Python/JS/C/C++ 2024 D卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

二叉树知识点

参考这篇文章二叉树知识点最详细最全讲解-CSDN博客 目录 预备知识 基本术语 相关性质 1.二叉树的定义 2.二叉树的性质 3.二叉树的种类 3.1 满二叉树 3.2 完全二叉树 3.3 二叉查找树 3.4 平衡二叉搜索树 4.二叉树的存储方式 4.1 链式存储 4.2 顺序存储 4.二叉树…

Behind the Code:与 Rakic 和 Todorovic 对话 OriginTrail 如何实现 AI 去中心化

原文&#xff1a;https://www.youtube.com/watch?vZMuLyLCtE3s&listPLtyd7v_I7PGnko80O0LCwQQsvhwAMu9cv&index12 作者&#xff1a;The Kusamarian 编译&#xff1a;OneBlock 随着人工智能技术的飞速发展&#xff0c;一系列前所未有的挑战随之而来&#xff1a;模型的…

NineData云原生智能数据管理平台新功能发布|2024年8月版​​

本月发布 10 项更新&#xff0c;其中重点发布 5 项、其他发布 5 项。 重点发布​ 数据库 DevOps - 敏感数据保护功能大幅升级​ 敏感数据保护全新升级&#xff0c;新增支持敏感数据等级&#xff0c;方便进行分类分级管控&#xff0c;加入数据类型概念&#xff0c;用于智能识…

分享基于PDF.JS的移动端PDF阅读器代码

一、前言 在之前的文章《分享基于PDF.js的pdf阅读器代码》里提到了PC端基于PDF.js的阅读器&#xff0c;本文将提供针对移动端的版本。 二、pdfViewer 为了能够直接使用&#xff0c;这里分享一下经过简单修改后能直接使用的pdfViewer代码&#xff1a; pdfViewer代码目录&…

SpringBoot2:请求处理原理分析-FORM表单请求接口

一、RESTFUL简介 Rest风格支持&#xff08;使用HTTP请求方式&#xff0c;动词来表示对资源的操作&#xff09; 以前&#xff1a;/getUser 获取用户 /deleteUser 删除用户 /editUser 修改用户 /saveUser 保存用户 现在&#xff1a; /user GET-获取用户 DELETE-删除用户 PUT-修改…

气膜快递仓:便捷与效率的完美结合—轻空间

随着快递行业的飞速发展&#xff0c;仓储物流的需求日益增加。在这个以速度为核心竞争力的行业中&#xff0c;如何快速、高效地处理大量货物成为企业亟待解决的问题。气膜快递仓作为一种新型仓储解决方案&#xff0c;以其便捷与效率的优势&#xff0c;迅速成为市场的宠儿&#…

【多线程】深入剖析生产者-消费者模型

&#x1f490;个人主页&#xff1a;初晴~ &#x1f4da;相关专栏&#xff1a;多线程 / javaEE初阶 一、阻塞队列 阻塞队列是⼀种特殊的队列&#xff0c;也遵守 "先进先出" 的原则。是在普通的队列基础上做出了补充。 java标准库中的原有的队列Queue及其子类&#xf…

ElasticSearch-ELK

Logstash Logstash 配置文件结构Logstash 导入数据到 ES同步数据库数据到 ES FileBeatELK&#xff08;采集 Tomcat 服务器日志&#xff09; 使用FileBeats将日志发送到LogstashLogstash输出数据到Elasticsearch&#xff08;logstash开头的索引&#xff09; 利用Logstash过滤器解…