[算法刷题积累] 两数之和以及进阶引用

2024-06-19 11:12

本文主要是介绍[算法刷题积累] 两数之和以及进阶引用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

 

两数之和很经典,通常对于首先想到的就是暴力的求解,当然这没有问题,但是我们如果想要追求更优秀算法,就需要去实现更加简便的复杂度。

        这里就要提到我们的哈希表法: 我们可以使用unordered_map去实现,也可以根据题目,用数组去模拟哈希表,两种方式选择合适的就好。

        哈希表通过记录来某一键值是否存在,如果存在则可进一步访问pair中的second类型变量,通过这一系列的组合,就可以用哈希表简化大部分问题。

        如本道题,二数之和,就是找寻数组中两个和为target的数,并且返回其下标。

        那么数据的值就key,对应的下标就是value。而且题目有要求:你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现,所以我们要先去寻找hash表中键值 target-nums[i]是否存在,存在就说明再nums[i]之前,就有与nums[i]和为target的值出现,所以返回 键值对应的Value(下标)和当前的i即可。   如果没有,则将当前的key(数据的值)添加并且记录其对应的下标。

、变式应用:

  •  此道题目,同样很容易想到暴力的解法,但是对于数据庞大的此道题会出现超时的结果。所以我们就要去优化算法结构,正好此题目与两个数据之间的关系有关的,所以很容易想到两数之和的哈希表解法。
  • 题目不再是返回满足条件的下标组合,而是输出满足条件下标的对数。所以这里的key键值和value的意义也要对应修改:key指代出现的数据对24取模后的值,value代表数据对24取模之后出现key的次数。
  • 举例比如:23出现,对24取模操作,得到23,那么hash[23]++(hash[23]的值代表出现次数)。
  • 所以对于两个数有必须要有关系:     ( X + Y )%24 == 0

所以就有下面的关系:

        

最后得到关系:   x%24 = (24-y%24)%24

利用这个关系式子,可以找到能与当前数据匹配之后能被24整除的数据对的个数。

具体操作:

1.寻找与当前数据满足条件的数据是否存在,如果存在,则统计次数。

2.如果没有,则将当前数据与24的取模作为key键值取更新value的值。(第一步和第二步一定不能反,如果倒过来,就不满足题目  i < j 

遍历一次整个数组,就可以统计出所有的对数即可。

这篇关于[算法刷题积累] 两数之和以及进阶引用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074868

相关文章

C++中悬垂引用(Dangling Reference) 的实现

《C++中悬垂引用(DanglingReference)的实现》C++中的悬垂引用指引用绑定的对象被销毁后引用仍存在的情况,会导致访问无效内存,下面就来详细的介绍一下产生的原因以及如何避免,感兴趣... 目录悬垂引用的产生原因1. 引用绑定到局部变量,变量超出作用域后销毁2. 引用绑定到动态分配的对象,对象

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Python内存管理机制之垃圾回收与引用计数操作全过程

《Python内存管理机制之垃圾回收与引用计数操作全过程》SQLAlchemy是Python中最流行的ORM(对象关系映射)框架之一,它提供了高效且灵活的数据库操作方式,本文将介绍如何使用SQLAlc... 目录安装核心概念连接数据库定义数据模型创建数据库表基本CRUD操作创建数据读取数据更新数据删除数据查

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python进阶之列表推导式的10个核心技巧

《Python进阶之列表推导式的10个核心技巧》在Python编程中,列表推导式(ListComprehension)是提升代码效率的瑞士军刀,本文将通过真实场景案例,揭示列表推导式的进阶用法,希望对... 目录一、基础语法重构:理解推导式的底层逻辑二、嵌套循环:破解多维数据处理难题三、条件表达式:实现分支

基于Python编写自动化邮件发送程序(进阶版)

《基于Python编写自动化邮件发送程序(进阶版)》在数字化时代,自动化邮件发送功能已成为企业和个人提升工作效率的重要工具,本文将使用Python编写一个简单的自动化邮件发送程序,希望对大家有所帮助... 目录理解SMTP协议基础配置开发环境构建邮件发送函数核心逻辑实现完整发送流程添加附件支持功能实现htm

基于Python实现进阶版PDF合并/拆分工具

《基于Python实现进阶版PDF合并/拆分工具》在数字化时代,PDF文件已成为日常工作和学习中不可或缺的一部分,本文将详细介绍一款简单易用的PDF工具,帮助用户轻松完成PDF文件的合并与拆分操作... 目录工具概述环境准备界面说明合并PDF文件拆分PDF文件高级技巧常见问题完整源代码总结在数字化时代,PD

javaSE类和对象进阶用法举例详解

《javaSE类和对象进阶用法举例详解》JavaSE的面向对象编程是软件开发中的基石,它通过类和对象的概念,实现了代码的模块化、可复用性和灵活性,:本文主要介绍javaSE类和对象进阶用法的相关资... 目录前言一、封装1.访问限定符2.包2.1包的概念2.2导入包2.3自定义包2.4常见的包二、stati

C++11右值引用与Lambda表达式的使用

《C++11右值引用与Lambda表达式的使用》C++11引入右值引用,实现移动语义提升性能,支持资源转移与完美转发;同时引入Lambda表达式,简化匿名函数定义,通过捕获列表和参数列表灵活处理变量... 目录C++11新特性右值引用和移动语义左值 / 右值常见的左值和右值移动语义移动构造函数移动复制运算符

C语言进阶(预处理命令详解)

《C语言进阶(预处理命令详解)》文章讲解了宏定义规范、头文件包含方式及条件编译应用,强调带参宏需加括号避免计算错误,头文件应声明函数原型以便主函数调用,条件编译通过宏定义控制代码编译,适用于测试与模块... 目录1.宏定义1.1不带参宏1.2带参宏2.头文件的包含2.1头文件中的内容2.2工程结构3.条件编