代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数 、1. 两数之和
242.有效的字母异位词
题目链接:242.有效的字母异位词
文档讲解:代码随想录有效的字母异位词
视频讲解:LeetCode:有效的字母异位词
状态:学会了
思路:
数组其实是简单哈希表。
哈希表用来快速判断元素是否在一个集合里面出现。
哈希表(数组):需要把字符映射到数组也就是哈希表的索引下标,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射下标0,相应字符z映射为下标25。哈希表设计为长为26的数组。哈希函数为s[i] - ‘a’,映射为字符的ASCII值。最后record数组有元素不为零,说明字符串s和t一定是字符数不同,return false。否则遍历后,return true。
- 时间复杂度:O(n)
- 空间复杂度:O(1),record是定义的一个常量大小的辅助数组。
// 哈希表:数组就行
class Solution {
public:bool isAnagram(string s, string t) {// 并不需要记住字符a的ASCII,只要求出一个相对数值就可以了int record[26] = {0};// 记录s字母情况for (int i = 0; i < s.size(); i++) {record[s[i] - 'a']++;}// 记录t字母情况for (int i = 0; i < t.size(); i++) {record[t[i] - 'a']--;}// 判断是否数组元素都为0// record数组如果有的元素不为零0,说明字符串s和t 一定是谁多了字符或者谁少了字符。for (int i = 0; i < 26; i++) {if (record[i] != 0) return false;}// record数组所有元素都为零0,说明字符串s和t是字母异位词return true;}
};
349. 两个数组的交集
题目链接:349. 两个数组的交集
文档讲解:代码随想录两个数组的交集
视频讲解:LeetCode:两个数组的交集
状态:学会了
思路:
这道题不能用 数组 来做,原因是使用数组来做哈希的题目,是因为题目都限制了数值的大小,而且如果哈希值比较少、特别分散、跨度非常大,使用数组就造成空间的极大浪费。但是这道题没有,所以考虑哈希表另一种常见类型。
std::set和std::multiset底层实现都是红黑树,std::unordered_set的底层实现是哈希表, 使用unordered_set 读写效率是最高的,并不需要对数据进行排序,而且还不要让数据重复,所以选择unordered_set。
哈希表(unordered_set):设计一个ordered_map来存储交集元素,返回是一个数组。去重记录,比较,然后存储,最后转换。思路如下:
- 时间复杂度:O(n+m),m是因为最后set转换为vector
- 空间复杂度:O(n)
// 哈希表:unordered_set
class Solution {
public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {// 哈希表 :unordered_set:去重、无序、快unordered_set<int> result_set;// 去重nums1unordered_set<int> nums1set(nums1.begin(), nums1.end());// 在nums2中查找for (int num : nums2) {// 发现nums2的元素 在nums_set里又出现过if (nums1set.find(num) != nums1set.end()) {result_set.insert(num);}}// 返回数组形式return vector<int>(result_set.begin(), result_set.end());}
};
注意:哈希问题不能都用 set 来解决,因为:直接使用set 不仅占用空间比数组大,而且速度要比数组慢,set把数值映射到key上都要做hash计算的。不要小瞧 这个耗时,在数据量大的情况,差距是很明显的。
补充:本题后面 力扣改了 题目描述 和 后台测试数据,增添了 数值范围。所以就可以 使用 数组 来做哈希表了, 因为数组都是 1000以内的。
202. 快乐数
题目链接:202. 快乐数
文档讲解:代码随想录快乐数
状态:学会了
思路:
哈希表(unordered_set):题目出现 无限循环 ,也就是说明求和的过程中,sum会重复出现。所以我们需要快速判断sum这个元素是否出现在集合里面,考虑哈希法,重复了就 return false;,否则一直找到sum == 1为止。
- 时间复杂度:O(logn)
- 空间复杂度:O(logn)
class Solution {
public:// 哈希表:unordered_set// 判断sum是否重复出现 出现返回false 否则一直找到sum=1为止// 取数值各个位上的单数之和int getSum (int n) {int sum = 0;while (n) {sum += (n % 10) * (n % 10);n /= 10;}return sum;}bool isHappy(int n) {unordered_set<int> set;while (1) {int sum = getSum(n);if (sum == 1) return true;// 如果这个sum曾经出现过,说明已经陷入了无限循环了,立刻return falseif (set.find(sum) != set.end()) {return false;} else {set.insert(sum);}n = sum;}}
};
注意:如何对取数值各个位上的单数操作:
while (n) {sum += (n % 10) * (n % 10);n /= 10;
}
补充:时间复杂度解释:
空间复杂度同样和原始数字 n 的位数相关,也就是与 O(logn)相关(这里的 n 是最初传入 getSum 函数的数字)。
1. 两数之和
题目链接:1. 两数之和
文档讲解:代码随想录两数之和
视频讲解:LeetCode:两数之和
状态:学会了
思路:
本道题中,不仅需要判断元素是否遍历过,还需要返回元素下标,所以需要 key value 结构来存储,key来存放元素,value来查询放下标,这就是map。
std::unordered_map 底层实现为哈希表,std::map 和std::multimap 的底层实现是红黑树。同理,std::map 和std::multimap 的key也是有序的(这个问题也经常作为面试题,考察对语言容器底层的理解)。 这道题目中并不需要key有序,选择std::unordered_map 效率更高!
使用 map 需要明白两点:用map来做什么?map中key和value分别表示什么?
哈希表(unordered_map):map 用来存放我们访问过的元素,因为遍历数组的时候,需要记录我们之前遍历过哪些元素和对应的下标,这样才能找到与当前元素相匹配的(相加等于target)。map中的存储结构为:{key:数组元素, value:数组元素对应的下标}。流程为:遍历数组,判断是否存在满足条件的key,有则返回下标,没有则将元素存入map。
- 时间复杂度: O(n)
- 空间复杂度:O(n)
在这里插入代码片
补充:
使用 数组 和 set 来做哈希法的局限:
- 数组 的大小是受限制的,而且如果元素很少,而哈希值太大会造成内存空间的浪费。
- set 是一个集合,里面放的元素只能是一个key,而两数之和这道题,不仅要判断y是否存在还要记录y的下标位置,因为要返回 x 和 y 的下标,所以set不能用。
- 这里只能选择数据结构:map,是一种 key value的存储结构,可以用key保存数值,value再保存数值所在的下标。
map.find():是unordered_map的一个成员函数,返回的是一个迭代器。迭代器是一种对象,它可以指向容器中的某个元素,并且支持一些操作,如移动到下一个元素、访问当前元素(value :iter->second)等。如果map中存在这个key的元素,iter会指向这个元素;若不存在,iter会等于map.end()。
{nums[i], i}:是c++中一种初始化列表的语法,用来初始化一个std::vector对象。
相关文章:
代码随想录算法训练营第六天| 242.有效的字母异位词 、349. 两个数组的交集、202. 快乐数 、1. 两数之和
242.有效的字母异位词 题目链接:242.有效的字母异位词 文档讲解:代码随想录有效的字母异位词 视频讲解:LeetCode:有效的字母异位词 状态:学会了 思路: 数组其实是简单哈希表。 哈希表用来快速判断元素是否在…...
DL/CV领域常见指标术语(FLOPS/mIoU/混淆矩阵/F1-measure)------一篇入门
1. FLOPS、FLOPs和GFLOPs FLOPS: floating-point operations per second,每秒浮点运算次数,用来衡量硬件性能。 FLOPs:floating point of operations,是浮点运算次数,用来衡量算法、模型的复杂度。 GFLOPSÿ…...
rknn 板端运行程序Invalid RKNN model version 6, Meet unsupported rknn target type
E RKNN: [09:15:53.053] 6, 1 E RKNN: [09:15:53.053] Invalid RKNN model version 6 E RKNN: [09:15:53.053] rknn_init, load model failed! [NN_ERROR] rknn_init fail! ret-1 或者报错: E RKNN: [08:35:30.804] Meet unsupported target type: 0x46495247 E…...
Linux 内核中的 container_of 宏:以 ipoib_rx_poll_rss 函数为例
在 Linux 内核编程中,container_of 是一个非常实用的宏,主要用于通过结构体的成员指针来获取包含该成员的整个结构体的指针。rx_ring = container_of(napi, struct ipoib_recv_ring, napi); 在代码中就是利用了这个宏,下面我们详细分析它的作用和工作原理。 背景知识 在内…...
【数据结构-红黑树】
文章目录 红黑树红黑树介绍红黑树的五个基本性质红黑树的平衡原理红黑树的操作红黑树的操作 代码实现节点实现插入和查询操作 红黑树 红黑树介绍 红黑树(Red-Black Tree)是一种自平衡的二叉查找树(Binary Search Tree, BST)&…...
一个简洁高效的Flask用户管理示例
Flask-Login 是 Flask 的用户管理扩展,提供 用户身份验证、会话管理、权限控制 等功能。 适用于: • 用户登录、登出 • 记住用户(“记住我” 功能) • 限制未登录用户访问某些页面 • 用户会话管理 1. 安装 Flask-Login pi…...
用Nginx打造防盗链护盾
用Nginx打造防盗链护盾 一、你的网站正在"为他人做嫁衣"? 想象一下这个场景: 你精心拍摄的摄影作品、录制的课程视频、设计的原创素材,被其他网站直接盗用链接。 更气人的是——当用户在他们网站查看这些资源时,消耗的…...
VS Code 如何搭建C/C++开发环境
目录 1.VS Code是什么 2. VS Code的下载和安装 2.1 下载和安装 2.2.1 下载 2.2.2 安装 2.2 环境的介绍 2.3 安装中文插件 3. VS Code配置C/C开发环境 3.1 下载和配置MinGW-w64编译器套件 3.1.1 下载 3.1.2 配置 3.2 安装C/C插件 3.3 重启VSCode 4. 在VSCode上编写…...
DeepSeek、微信、硅基流动、纳米搜索、秘塔搜索……十种不同方法实现DeepSeek使用自由
为了让大家实现 DeepSeek 使用自由,今天分享 10 个畅用 DeepSeek 的平台。 一、官方满血版:DeepSeek官网与APP 首推,肯定是 DeepSeek 的官网和 APP,可以使用满血版 R1 和 V3 模型,以及联网功能。 网址: htt…...
【Java】Enum类的常用方法、实现接口及其实际应用
Enum类的常用方法 package com.star.enum03;/** * author : Starshine */public class TestSeason { //这是一个main方法,是程序的入口: public static void main(String[] args) { //用enum关键字创建的Season枚举类上面的父类是ÿ…...
Linux | 进程控制(进程终止与进程等待)
文章目录 Linux | 进程控制 — 进程终止 & 进程等待1、进程终止进程常见退出方法1.1退出码基本概念获取退出码的方式常见退出码约定使用场景 1.2 strerror函数 & errno宏1.3 _exit函数1.4_exit和exit的区别1.4.1 所属头文件与函数原型1.4.2 执行过程差异**结合现象分析…...
三、tsp学习笔记——屏幕移植
泰山派-6寸猫屏转接板 - 立创开源硬件平台 泰山派樱猫的教程,屏资料链接: https://pan.baidu.com/s/1pNAKH33r7LtZG6EwHJ-HNA?pwdnsde 提取码: nsde (不要浪费时间下载,没有用,下载gitee上的) leefei/tspi-disp-6…...
python全栈-python进阶
python进阶 文章目录 python进阶异常except自定义异常类 文件操作序列化和反序列化CSV文件os模块os.path模块shutil模块 拷贝压缩 模块--modulefrom 模块 import 成员包package库LibraryPIP库 GUI编程-tkinter版使用类定义的GUI界面设置控件的属性方式Label标签的常用属性Butto…...
SpringBoot如何配置开发环境(JDK、Maven、IDEA等)
目录 1. 安装JDK 一、JDK介绍JRE(Java Runtime Envirnment):Java运行环境 二、下载JDK官网地址:Java Downloads | Oracle 三、安装JDK点击下载下来的安装包进行安装 四、配置JDK进入到环境变量中(下面介绍两种进入…...
图片粘贴上传实现
图片上传 html demo 直接粘贴本地运行查看效果即可,有看不懂的直接喂给 deepseek 会解释的很清晰 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"…...
C++--STL库-List
目录 1.list 的基本使用 1.1 创建和初始化 1.2. 插入元素 1.3. 删除元素 1.4. 访问元素 1.5 遍历 1.6 总结 list是C标准库(STL)中的双向链表容器,属于<list>头文件。 它的特点是: 动态大小:可以随时插入…...
kubeadm拉起的k8s集群证书过期的做法集群已奔溃也可以解决
kubeadm拉起的k8s集群证书过期的做法 这个是很久之前遇到的了,今天有空(心血来潮)就都回忆回忆写在这里为爱发光,部分内容来自arch先生(死党)的帮助。有时候有很多部门提了建k8s的需求,有些是临…...
idea连接gitee(使用idea远程兼容gitee)
文章目录 先登录你的gitee拿到你的邮箱找到idea的设置选择密码方式登录填写你的邮箱和密码登录成功 先登录你的gitee拿到你的邮箱 具体位置在gitee–>设置–>邮箱管理 找到idea的设置 选择密码方式登录 填写你的邮箱和密码 登录成功...
Kafka 简介
Kafka 简介 Apache Kafka 是一个开源的分布式流处理平台,广泛应用于实时数据流处理、日志管理、消息传递等场景。Kafka 最初由 LinkedIn 开发,并于 2011 年捐献给 Apache 软件基金会。 Kafka 的设计目标是高吞吐量、低延迟和高可用性,它能够…...
Ubuntu22.04 Deepseek-R1本地容器化部署/内网穿透/OPENWEBUI,打造个人AI助手!
1. 前言 本地部署DeepSeek并实现内网穿透,为家庭成员提供强大的AI支持。通过使用Ollama、Docker、OpenWebUI和Nginx,内网穿透,我们可以轻松实现快速响应和实时搜索功能。 2.软硬件环境 系统:ubuntu22.04, cuda12GPU: RTX3080Ti …...
红蓝对抗之常见网络安全事件研判、了解网络安全设备、Webshell入侵检测
文章目录 研判(入侵检测) 设备 经典网络云网络 异常HTTP请求Webshell分析 Webshell 的分类Webshell 的检测 主机层面流量层面 附录 常见端口漏洞…...
Linux部署DeepSeek r1 模型训练
之前写过一篇windows下部署deepseekR1的文章,有小伙伴反馈提供一篇linux下部署DeepSeek r1 模型训练教程,在 Linux 环境下,我找了足够的相关资料,花费了一些时间,我成功部署了 DeepSeek R1 模型训练任务,结…...
【大模型】DeepSeek:AI浪潮中的破局者
【大模型】DeepSeek:AI浪潮中的破局者 引言:AI 新时代的弄潮儿DeepSeek:横空出世展锋芒(一)诞生背景与发展历程(二)全球影响力初显 探秘 DeepSeek 的技术内核(一)独特的模…...
寒假学习总结
整个寒假都走在数据结构与算法的路上,深入学习了其中多个板块,刷了一些与之对应的题目,下面来一期总结(c) (emmm,主播在寒假试着去学习了几大语言的语法基础(丢丢) 如Ja…...
自愈网络的定义、其为用户带来的益处、具体的使用案例
在当今高度互联的世界中,网络稳定性和可靠性对于各种应用场景至关重要。无论是企业的日常运营、智能家居的便捷控制,还是工业网络的自动化管理,网络的任何中断都可能带来不可估量的损失和不便。正是基于这种需求,以太联—Intellin…...
NumPy的基本使用
在 Python 的数据科学与数值计算领域,NumPy 无疑是一颗耀眼的明星。作为 Python 中用于科学计算的基础库,NumPy 提供了高效的多维数组对象以及处理这些数组的各种工具。本文将带您深入了解 NumPy 的基本使用,感受它的强大魅力。 一、安装与导…...
HTTP 与 HTTPS:协议详解与对比
文章目录 概要 一. HTTP 协议 1.1 概述 1.2 工作原理 1.3 请求方法 1.4 状态码 二. HTTPS 协议 2.1 概述 2.2 工作原理 2.3 SSL/TLS 协议 2.4 证书 三. HTTP 与 HTTPS 的区别 四. 应用场景 4.1 HTTP 的应用场景 4.2 HTTPS 的应用场景 概要 HTTP(Hy…...
从零开始构建一个语言模型中vocab_size(词汇表大小)的设定规则
从零开始构建一个语言模型就要设计一个模型框架,其中要配置很多参数。在自然语言处理任务中,vocab_size(词汇表大小) 的设定是模型设计的关键参数之一,它直接影响模型的输入输出结构、计算效率和内存消耗。 本文是在我前文的基础上讲解的:从零开始构建一个小型字符级语言…...
斐波那契数列模型:在动态规划的丝绸之路上追寻斐波那契的足迹(上)
文章目录 引言递归与动态规划的对比递归解法的初探动态规划的优雅与高效自顶向下的记忆化搜索自底向上的迭代法 性能分析与比较小结 引言 斐波那契数列,这一数列如同一条无形的丝线,穿越千年时光,悄然延续其魅力。其定义简单而优美ÿ…...
RT-Thread+STM32L475VET6——ADC采集电压
文章目录 前言一、板载资源二、具体步骤1.打开CubeMX进行配置1.1 使用外部高速时钟,并修改时钟树1.2 打开ADC1的通道3,并配置为连续采集模式(ADC根据自己需求调整)1.3 打开串口1.4 生成工程 2. 配置ADC2.1 打开ADC驱动2.2 声明ADC2.3 剪切stm…...
基于Django快递物流管理可视化分析系统(完整系统源码+数据库+详细开发文档+万字详细论文+答辩PPT+详细部署教程等资料)
文章目录 基于Django快递物流管理可视化分析系统(完整系统源码数据库详细开发文档万字详细论文答辩PPT详细部署教程等资料)一、项目概述二、项目说明三、研究意义四、系统设计技术架构 五、功能实现六、完整系统源码数据库详细开发文档万字详细论文答辩P…...
【Pandas】pandas Series reindex_like
Pandas2.2 Series Computations descriptive stats 方法描述Series.align(other[, join, axis, level, …])用于将两个 Series 对齐,使其具有相同的索引Series.case_when(caselist)用于根据条件列表对 Series 中的元素进行条件判断并返回相应的值Series.drop([lab…...
Ollama安装和迁移,以及部署DeepSeek模型
什么是 Ollama Ollama 是大语言模型管理工具,它的主要作用是简化大语言模型的本地化部署和运行。如果你想调用本地模型,保护个人隐私,构建个人知识库,那你可以考虑使用 Ollama。 Ollama 的官网是 https://ollama.com/,正如官网所说,“Get up and running with large l…...
【数据挖掘】
数据挖掘 目录:1. 数据转换2. 属性选择3. 独立于方案的选择4. 探索空间5. 具体方案的选择6. 离散化数值属性无监督离散化基于熵的离散化其他离散化方法 k-means算法原理算法步骤优缺点优点缺点 代码示例(使用Python和scikit-learn库)代码解释…...
芝加哥学派(Chicago School):金融与经济学的创新力量(中英双语)
芝加哥学派:金融与经济学的创新力量 在经济学和金融学的历史上,有一个学派的影响力不容忽视,那就是芝加哥学派(Chicago School)。芝加哥学派不仅在学术界广受推崇,也深刻影响了全球的经济政策和金融市场。…...
web入侵实战分析-常见web攻击类应急处置实验1
场景说明: 某天运维人员发现在/opt/tomcat8/webapps/test/目录下,多出了一个index_bak.jsp这个文件, 并告诉你如下信息 操作系统:ubuntu-16.04业务:测试站点中间件:tomcat开放端口:22&#x…...
.NET SixLabors.ImageSharp v1.0 图像实用程序控制台示例
使用 C# 控制台应用程序示例在 Windows、Linux 和 MacOS 机器上处理图像,包括创建散点图和直方图,以及根据需要旋转图像以便正确显示。 这个小型实用程序库需要将 NuGet SixLabors.ImageSharp包(版本 1.0.4)添加到.NET Core 3.1/ …...
基于ffmpeg+openGL ES实现的视频编辑工具-字幕添加(六)
在视频编辑领域,字幕的添加是一项极为重要的功能,它能够极大地丰富视频内容,提升观众的观看体验。当我们深入探究如何实现这一功能时,FreeType 开源库成为了强大助力。本文将详细阐述借助 FreeType 库生成字幕数据的过程,以及如何实现字幕的缩放、移动、旋转、颜色修改、对…...
SpringMVC新版本踩坑[已解决]
问题: 在使用最新版本springMVC做项目部署时,浏览器反复500,如下图: 异常描述: 类型异常报告 消息Request processing failed: java.lang.IllegalArgumentException: Name for argument of type [int] not specifie…...
【科研绘图系列】R语言绘制SCI论文图合集
禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载Load dataFigure 1Fig 1B: functional assays adhensionFIG 1C: Functional assays OPK Figure 2Fig 2C: Settings and function fo…...
间隔连续问题
间隔连续问题 1. 数据结构:某游戏公司记录的用户每日登录数据 表名:game_user 字段名:id(用户id)、dt(日期) 2. 需求: ① 创建表 ② 计算每个用户最大的连续登录天数,…...
3月营销日历:开启春日盛宴,绽放生活魅力
关键营销节点∶惊蛰、女生节、妇女节、 植树节、315消费者权益日、春分 营销关键词 养生、女生魅力、感恩女性、环保、品质 01.重点关注品类 春季服饰:如轻薄外套、春装等,适合惊蛰后的市场需求; 美妆护肤:妇女节期间…...
网络工程师 (48)传输层概述
前言 传输层(Transport Layer)是计算机网络体系结构中的关键层次之一,主要负责在源端和目的端之间提供端到端的数据传输服务。 一、位置与功能 传输层位于OSI(开放系统互连)参考模型的第四层,介于网络层和应…...
字符串函数和结构题内存对齐
图下为函数使用: #include <ctype.h>int main() {int ret isdigit(Q);printf("%d\n", ret);return 0; }int main() {printf("%c\n", toupper(a));printf("%c\n", tolower(A));return 0; }...
同花顺C++面试题及参考答案
对 C 和 C++ 哪个更熟悉? 在编程语言的学习与实践中,我对 C++ 更为熟悉。C 语言作为一门经典的编程语言,以其高效、灵活和接近硬件的特性,在系统编程、嵌入式开发等领域占据着重要地位。它提供了丰富的底层操作能力,如指针操作、内存管理等,为开发者直接控制计算机资源提…...
Python JSON的深度解析:从基础到应用
Python JSON的深度解析:从基础到应用 flyfish 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于一个子集的JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999…...
创建三个节点
1. 节点克隆 根据教程Hadoop编译安装-CSDN博客将一台机器的hadoop的环境搭建好。 在虚拟机的列表中选中一台机器,右键—>管理—>克隆 填好【虚拟机名称】,选择本地存储位置,点击完成,就节点克隆完成了。 2. 修改IP地址 编…...
滤波器 | 原理 / 分类 / 特征指标 / 设计
注:本文为 “滤波器” 相关文章合辑。 未整理去重。 浅谈滤波器之 —— 啥是滤波器 原创 RF 小木匠 射频学堂 2020 年 03 月 25 日 07:46 滤波器,顾名思义,就是对信号进行选择性过滤,对不需要的信号进行有效滤除。按照其传输信…...
Flutter - 初体验
项目文件目录结构介绍 注:创建 Flutter 项目名称不要包含特殊字符,不要使用驼峰标识 // TODO 开发中运行一个 Flutter 三种启动方式 Run 冷启动从零开始启动Hot Reload 热重载执行 build 方法Hot Restart 热重启重新运行整个 APP 先看效果,…...
OSPF(开放路径最短优先)
ospf优先级:内部优先级默认为10,外部优先级默认为150 1.ospf的三张表 (1)邻居表 <记录邻居状态和关系> (2)拓扑表 <链路状态数据库> (3)路由表 <对链路状态数据库进…...