【力扣一轮】202.快乐数 1.两数之和

202.快乐数

力扣链接

代码随想录链接

思路

看到这一题没思路,直接看题解。

发现其中一个难点在于“无限循环”,这个字眼可以转换成退出条件。退出条件就有两种,一种是这个数字是快乐数,一种是这个数字不是快乐数。

如果是快乐数好说,判断结果是否为1即可。如果不是呢?就需要看无限循环。

无限循环的意思翻译下就是判断之后出现的结果,是否在之前的哈希表中存在。如果存在,则说明这个数字是快乐数。

另外一个难点就是怎么对其计算出数字之和?发现用循环解决的。

伪代码

当结果集合不存在1时得到一个计算结果判断这个结算结果是否存在如果存在说明开始循环了返回false将其放入结果集合中
返回true(因为退出循环了)

代码

int getSum(int n ){int sum = 0 ;while(n!=0){sum += (n%10)*(n%10);n /=10;}return sum;
}
bool isHappy(int n) {unordered_set<int> st;n = getSum(n);st.insert(n);while(st.find(1)==st.end()){//等于就相当没找到n = getSum(n);if(st.find(n)!=st.end()){//说明已经有重复的n了return false;}st.insert(n);}//取出数字的每个位置的平方和,放入unorderd_set中return true;
}

1.两数之和

力扣链接

代码随想录链接

思路

刷力扣第一题,刚开始是想暴力,循环两轮取出对应的下标。但因为按照代码随想录刷题,所以借用它的思想,使用哈希表。若使用哈希表,则问题转换为,看哪个元素在集合中出现过?接下来就是这个元素是什么?——应该是target-其中一个元素的差。也就是看差是否出现,以及出现在哪里。

思路想到这里卡住,便去看卡尔讲解视频。

用到了哈希映射,如果这个差没有在集合中,那么就添加到里面;如果在的话,就取出来,作为返回结果。

此时有几个问题要回答。

①为什么会想到用哈希法?

②为什么会想到要用map?以及map,unordered-map,multi-map为什么用第二个?

③map的作用是什么?

④map的key是用来干什么的?为什么key/value不能转换?

问题①,在看到一道题,出现其中一个元素是否存在/出现时,就要考虑是否能使用哈希表?

对应到这道题目,就是在遍历时,需要看这个差是否出现过,若出现,那它的索引是什么。所以,根据这个思考过程,想到用哈希表。

问题②,因为要获取其索引,而差其实是数组元素的数值,索引是另外一个数据,所以需要存储两个元素,数值:索引。就需要用到map。

为什么用unordered-map?因为map和multi-map的底层是红黑树,而unordered-map底层是哈希表,索引查找会更快。

问题③,既然要获取其索引,map的作用在这道题中就是存储暂时不是差的元素。

问题④,key存放的是数值,就是看差是否在map中。如果value存放的是数值,key存放的是索引,那么无法在map中直接通过差查询,而需要遍历,差通过value来比对,会影响效率。

时间复杂度: O ( n ) O(n) O(n)

空间复杂度: O ( n ) O(n) O(n)

伪代码

 //只会存在一个有效答案遍历数组,依次查看所需元素是否在map中,如果需要的元素在map中,则返回当前下标以及对应元素下标如果不在map中则将当前元素存入map中返回空

代码

vector<int> twoSum(vector<int>& nums, int target) {map<int , int > mp ;vector<int> vt;for(int i = 0 ; i < nums.size(); i++){int need_num = target - nums[i];map<int, int>::iterator map_result = mp.find(need_num);if (map_result == mp.end()){//这意思就是没找到所需要的元素mp.insert(pair<int,int>(nums[i],i));}else{//存放进{}中vt.push_back(map_result->second);vt.push_back(i);return vt;}}return vt;
}

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

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

相关文章

【vue嵌套iframe】实现项目重构

vue嵌套iframe 创建 iframe 通用组件添加页面及路由进阶&#xff1a;vue 与 iframe 的双向通讯代码下载 适用于使用vue重构及vue访问其他服务页面 基于vue3示例页面添加嵌套iframe的页面 创建 iframe 通用组件 IframeTemplate.vue 页面布局 <template><div class…

9.2 Go语言入门(包和导入)

Go语言入门&#xff08;包和导入&#xff09; 目录一、包和导入1. 包&#xff08;Package&#xff09;1.1 包的定义1.2 包的作用1.3 main 包1.4 非 main 包 2. 导入&#xff08;Import&#xff09;2.1 导入标准库2.2 导入第三方包2.3 导入本地包2.4 导入别名2.5 导入并调用初始…

mysql授权用户

mysql授权用户只能看到某张表单表 要实现MySQL中的用户只能看到某张表&#xff0c;可以通过创建一个新的数据库用户&#xff0c;并且只授予该用户对特定表的权限。以下是实现这一功能的步骤和示例代码&#xff1a; 创建新用户并设置密码。 授予该用户对特定数据库的权限。 授…

国内最受欢迎的7大API供应平台对比和介绍||电商API数据采集接口简要说明

本文将介绍7款API供应平台&#xff1a;聚合数据、百度APIStore、Apix、数说聚合、通联数据、HaoService、datasift 。排名不分先后&#xff01; 免费实用的API接口 第一部分 1、聚合数据&#xff08;API数据接口_开发者数据定制&#xff09; 2、百度API Store(API集市_APIStore…

数据库系统原理实验报告6 | 视图

整理自博主本科《数据库系统原理》专业课自己完成的实验报告&#xff0c;以便各位学习数据库系统概论的小伙伴们参考、学习。 专业课本&#xff1a; ​ ———— 本次实验使用到的图形化工具&#xff1a;Heidisql ​ 目录 一、实验目的 二、实验内容 1&#xff0e;根据EDUC数…

妙解设计模式之适配器模式

适配器模式的概念 适配器模式是一种结构设计模式&#xff0c;它允许将接口不兼容的类通过一个适配器类进行适配&#xff0c;使得这些类可以一起工作。适配器模式通常用于以下情况&#xff1a; 当一个接口的实现类已经存在&#xff0c;但是另一个接口需要的是不兼容的时候。当…

揭秘C++ String容器:字符串操作的艺术

目录 ​编辑 引言 一、初识std::string&#xff1a;构造与初始化 二、字符串的操纵艺术&#xff1a;拼接、查找与替换 三、访问与遍历&#xff1a;字符的细腻触感 四、大小与容量&#xff1a;动态调整的智慧 五、进阶功能&#xff1a;探索更多可能 结语 引言 在C标准库…

ssms执行建表后如何自动刷新所有SQL SERVER表

在 SQL Server Management Studio (SSMS) 中&#xff0c;当你通过 T-SQL 脚本创建表后&#xff0c;通常需要手动刷新对象资源管理器以查看新表。SSMS 并没有提供自动刷新的选项&#xff0c;但你可以使用以下几种方法来解决这个问题&#xff1a; 手动刷新&#xff1a;在对象资源…

网络工程师基础知识:

网络工程师基础知识&#xff1a; 1.最基本的7层协议&#xff1a; 来源&#xff1a; 通过网络网线和报文的这些机制让全世界的数据通过二进制流来进行沟通 从下而上&#xff1a; 物理层 数据链路层 网络层 传输层 表示层 会话层 应用层 基本的一个数据报文&#xff1a; 数据链…

Java 8

这次我学习了第八次Java课程 这次课在假期&#xff0c;包含了两天的一大波内容 对于编写项目过程中有许多的 辅助类 System System.out.println() 打印 Scanner Scanner sc new Scanner(System.in) 赋值 Random 随机数 Math 数学运算 日期 要想使用日期方法就要引入包Date 1…

人工智能为犯罪地下世界带来了巨大的生产力提升

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Java 18 新特性详解

Java 18 新特性详解 Java 18 作为 Oracle 推出的又一重要版本&#xff0c;继续秉持着 Java 平台“创新但不破坏”的原则&#xff0c;带来了多项旨在提升开发效率、性能和安全性的新特性。本篇文章将深入解析 Java 18 引入的主要特性&#xff0c;并探讨它们如何影响开发者的工作…

详解 Scala 的集合类型

一、集合简介 1. 类型 序列 Seq&#xff1a;类似于 Java 中的 List 接口集 Set&#xff1a;类似于 Java 中的 Set 接口映射 Map&#xff1a;类似于 Java 中的 Map 接口所有的集合都扩展自 Iterable 特质 2. 不可变集合 位于 scala.collection.immutable 包&#xff0c;指该集…

Runtime,你学会了吗?

作为Java开发者,我们经常听到关于Runtime类的提及,但很少有人深入了解它的作用和用法。 Runtime类是Java标准库中的一个关键类,提供了与运行时环境交互的方法。 本文将深入探讨Runtime类的背景、用途、常用方法以及最佳实践,帮助程序员们更好地利用这一重要工具。 1. 背…

ISSCC论文详解 2023 16.1 MulTCIM 存内计算在多模态领域的应用前沿论文

多模态模型&#xff0c;是指具备理解来自不同模态&#xff08;如视觉、自然语言、语音等&#xff09;的混合信号能力的神经网络模型&#xff0c;是当今人工智能模型发展的重要方向之一。本文将要介绍的文献题目为《16.1 MulTCIM: A 28nm 2.24μJ/Token Attention-Token-Bit Hyb…

一些常见的程序设计问题

秒杀 redis缓存库存 1.判断库存名额是否充足&#xff0c;2.进行扣减 为了防止超卖&#xff0c;必须保证这两部的原子性 库存扣减后发送mq消息&#xff0c;去异步执行创建订单流程&#xff0c;创建订单失败会造成少卖。可加重试机制&#xff0c;对多次重试依旧失败的&#xff…

刷题记录第九十九天-与排序相关的题-第K大的数和逆序对的数量

求第K大的数—利用快速排序的思想 class Solution { public:int partition(vector<int>& num, int l, int r){swap(num[l],num[lrand()%(r-l1)]);int x num[l];int il1, jr;while(i<j){while(i<r&&num[i]<x){i;}while(num[j]>x){j--;}if(i>…

SpringBoot自动化配置原理

Spring Boot 的自动化配置原理基于 EnableAutoConfiguration 注解及其相关机制。以下是其工作原理的详细说明&#xff1a; Spring Boot 自动化配置原理 主要概念和机制&#xff1a; EnableAutoConfiguration 注解&#xff1a; 这个注解告诉 Spring Boot 启动时去自动配置 Spr…

【java程序设计期末复习】chapter7 内部类和异常类

内部类和异常类 内部类 ava支持在一个类中声明另一个类&#xff0c;这样的类称作内部类&#xff0c;而包含内部类的类成为内部类的外嵌类。 注意 &#xff08;1&#xff09;内部类的类体中不可以声明类变量和类方法。 &#xff08;2&#xff09;外嵌类的类体中可以用内部类…

[论文阅读笔记31]Mamba (Selective Structured State Space Model) 及其应用

最近想学一下Mamba模型&#xff0c;奈何看了很多视频还是感觉一知半解&#xff0c;因此做一篇笔记&#xff0c;顺便介绍一下Mamba结构作为CV backbone和时间序列预测领域的应用。 论文1. Mamba: Linear-Time Sequence Modeling with Selective State Spaces 0. Abstract 现有…