【牛客-算法】NC61 两数之和(哈希表的运用,C++)

简介: 前言🔥 该专栏作为算法题笔记,记录算法的思路、遇到的问题,以及能跑的代码,持续更新中!🔥 推荐一款面试、刷题神器牛客网:👉开始刷题学习👈

前言

🔥 该专栏作为算法题笔记,记录算法的思路、遇到的问题,以及能跑的代码,持续更新中!

🔥 推荐一款面试、刷题神器牛客网:👉开始刷题学习👈

题目描述

  • 原题链接:NC61 两数之和
  • 描述
  • 给出一个整型数组 numbers 和一个目标值 target,请在数组中找出两个加起来等于目标值的数的下标,返回的下标按升序排列。
    (注:返回的数组下标从1开始算起,保证target一定可以由数组里面2个数字相加得到)
  • 数据范围

2len(numbers)105,10numbersi109,0target109

要求

空间复杂度O ( n ) ,时间复杂度O ( n l o g n )  

算法设计思路

直接两层循环暴力搜索会超时。因此,我们可以使用哈希表(散列表)来节省时间,只需遍历一次数组。数组的下标是连续的数字,而哈希表的下标可以是不连续的数字、字符串。


用哈希表的左值(哈希表的下标)存放数组中的数,右值存放对应的数组下标。读到数组中的数字numbers[i]时,计算target与它的差值d,如果哈希表中存在下标d,则返回结果。否则将当前数字放入哈希表。

3143e14612224c2796458f12baa1a42e.png

图中我们遍历到数组中的数字4时,发现 h[6-4]=h[2]=0,就知道与4和为6的数字在数组中的下标是0。

算法实现(C++)

#include<map>
class Solution {
public:
    vector<int> twoSum(vector<int>& numbers, int target) {
        vector<int> r;          //返回找到的下标
        map<int, int> h;        //哈希表
        map<int, bool> pass;    //h中左值存在则为true
        for(int i = 0; i < numbers.size(); i++){
            int d = target - numbers[i];
            if(pass[d] != 0){
                r.push_back(h[d]+1);
                r.push_back(i+1);
            }
            else{
                h[numbers[i]] = i;
                pass[numbers[i]] = 1;
            }
        }
        return r;
    }
};

运行结果

c21089d0f23b4e2fab0cc8ad5450f074.png

相关文章
|
5天前
|
存储 监控 算法
电脑监控管理中的 C# 哈希表进程资源索引算法
哈希表凭借O(1)查询效率、动态增删性能及低内存开销,适配电脑监控系统对进程资源数据的实时索引需求。通过定制哈希函数与链地址法冲突解决,实现高效进程状态追踪与异常预警。
61 10
|
8天前
|
存储 算法 安全
控制局域网电脑上网的 PHP 哈希表 IP 黑名单过滤算法
本文设计基于哈希表的IP黑名单过滤算法,利用O(1)快速查找特性,实现局域网电脑上网的高效管控。通过PHP关联数组构建黑名单,支持实时拦截、动态增删与自动过期清理,适用于50-500台终端场景,显著降低网络延迟,提升管控灵活性与响应速度。
48 8
|
13天前
|
存储 运维 监控
局域网网络监控软件的设备连接日志哈希表 C++ 语言算法
针对局域网监控软件日志查询效率低的问题,采用哈希表优化设备连接日志管理。通过IP哈希映射实现O(1)级增删查操作,结合链地址法解决冲突,显著提升500+设备环境下的实时处理性能,内存占用低且易于扩展,有效支撑高并发日志操作。
92 0
|
5月前
|
存储 监控 算法
基于 C++ 哈希表算法实现局域网监控电脑屏幕的数据加速机制研究
企业网络安全与办公管理需求日益复杂的学术语境下,局域网监控电脑屏幕作为保障信息安全、规范员工操作的重要手段,已然成为网络安全领域的关键研究对象。其作用类似网络空间中的 “电子眼”,实时捕获每台电脑屏幕上的操作动态。然而,面对海量监控数据,实现高效数据存储与快速检索,已成为提升监控系统性能的核心挑战。本文聚焦于 C++ 语言中的哈希表算法,深入探究其如何成为局域网监控电脑屏幕数据处理的 “加速引擎”,并通过详尽的代码示例,展现其强大功能与应用价值。
135 2
|
6月前
|
存储 算法 C++
Windows共享文件:探秘C++实现的B树索引算法奇境
在数字化时代,Windows共享文件的高效管理至关重要。B树算法以其自平衡多路搜索特性,在文件索引与存储优化中表现出色。本文探讨B树在Windows共享文件中的应用,通过C++实现具体代码,展示其构建文件索引、优化数据存储的能力,提升文件检索效率。B树通过减少磁盘I/O操作,确保查询高效,为企业和个人提供流畅的文件共享体验。
|
3月前
|
存储 监控 算法
基于跳表数据结构的企业局域网监控异常连接实时检测 C++ 算法研究
跳表(Skip List)是一种基于概率的数据结构,适用于企业局域网监控中海量连接记录的高效处理。其通过多层索引机制实现快速查找、插入和删除操作,时间复杂度为 $O(\log n)$,优于链表和平衡树。跳表在异常连接识别、黑名单管理和历史记录溯源等场景中表现出色,具备实现简单、支持范围查询等优势,是企业网络监控中动态数据管理的理想选择。
110 0
|
4月前
|
存储 机器学习/深度学习 算法
基于 C++ 的局域网访问控制列表(ACL)实现及局域网限制上网软件算法研究
本文探讨局域网限制上网软件中访问控制列表(ACL)的应用,分析其通过规则匹配管理网络资源访问的核心机制。基于C++实现ACL算法原型,展示其灵活性与安全性。文中强调ACL在企业与教育场景下的重要作用,并提出性能优化及结合机器学习等未来研究方向。
128 4
|
5月前
|
监控 算法 数据处理
基于 C++ 的 KD 树算法在监控局域网屏幕中的理论剖析与工程实践研究
本文探讨了KD树在局域网屏幕监控中的应用,通过C++实现其构建与查询功能,显著提升多维数据处理效率。KD树作为一种二叉空间划分结构,适用于屏幕图像特征匹配、异常画面检测及数据压缩传输优化等场景。相比传统方法,基于KD树的方案检索效率提升2-3个数量级,但高维数据退化和动态更新等问题仍需进一步研究。未来可通过融合其他数据结构、引入深度学习及开发增量式更新算法等方式优化性能。
165 17
|
4月前
|
机器学习/深度学习 存储 算法
基于 C++ 布隆过滤器算法的局域网上网行为控制:URL 访问过滤的高效实现研究
本文探讨了一种基于布隆过滤器的局域网上网行为控制方法,旨在解决传统黑白名单机制在处理海量URL数据时存储与查询效率低的问题。通过C++实现URL访问过滤功能,实验表明该方法可将内存占用降至传统方案的八分之一,查询速度提升约40%,假阳性率可控。研究为优化企业网络管理提供了新思路,并提出结合机器学习、改进哈希函数及分布式协同等未来优化方向。
112 0
|
4月前
|
存储 缓存 Java
c++的哈希表、哈希桶的介绍与实现
这一篇文章大致实现详细介绍什么是哈希,然后再介绍什么是哈希表,怎么代码实现哈希表,然后再介绍哈希桶,怎么代码实现哈希桶,最后再介绍他俩有什么细节上的差别,与代码的一些细节优化。
103 0

热门文章

最新文章