代码随想录算法【Day5】
DAY5
1.熟悉哈希表的数据结构:数组、map和set,使用方法、使用场景
2.哈希表应用场景:解决给你一个元素,判断它在集合里是否出现过。
242.有效的字母异位词
本题用数组解决的。
class Solution { public:bool isAnagram(string s, string t) {//通过ascii码表将26个字母映射到数组recordint record[26] = {0};for(int i = 0; i < s.size(); i++){record[s[i] - 'a'] ++;}for(int i = 0; i < t.size(); i++){record[t[i] - 'a'] --;}for(int i = 0; i < 26; i++){if(record[i] != 0) return false;}return true;} };
有关类型转换,当char类型进行算术运算时,会发生如下转换:
-
在算术运算之前,char类型会被自动提升(promoted)为int类型
-
这种转换叫做"整型提升"(integral promotion)
-
所以两个char相减的结果直接就是int类型,不需要再进行类型转换了
349. 两个数组的交集
什么时候用set?1.数值很大;2.数值分布很散
若数值的大小上亿,数组无法解决且浪费空间,这种情况适合用set。
本题数组最大为1000,但是我们按照数值上亿的情况,也就是用set来做。
class Solution { public:vector<int> intersection(vector<int>& nums1, vector<int>& nums2) {unordered_set<int> result_set;unordered_set<int> nums_set(nums1.begin(), nums1.end());// for(int num : nums2)for(int i = 0; i < nums2.size(); i++){ int num = nums2[i];if(nums_set.find(num) != nums_set.end()){result_set.insert(num);}}return vector<int>(result_set.begin(), result_set.end());} };
1.for(int num : nums2)的含义
遍历nums2中的数,并赋值给num
2.if(nums_set.find(num) != nums_set.end())的含义。
nums_set.end()是最后一个元素后面的位置,如果nums_set.find()没有找到num,就会返回nums_set.end()。
所以这个判断语句的意思是:if(nums_set中存在num)
3.return vector<int>(result_set.begin(), result_set.end()); 这里是一个强制类型转换吗
不是,是在调用 vector 的一个构造函数。这是 vector 类的一个特殊构造函数,它可以接收两个迭代器作为参数,然后创建一个新的 vector,包含这两个迭代器之间的所有元素。
这行代码做了以下事情:
-
创建一个新的 vector<int> 对象
-
使用 result_set 的开始迭代器(begin())和结束迭代器(end())
-
将 result_set 中的所有元素复制到这个新的 vector 中
202.快乐数
直接法:报错超时
class Solution { public:bool isHappy(int n) {int res; //记录平方和int tmp;while(n > 3){res = 0;while(n){tmp = n%10;n /= 10;res = res + tmp * tmp;}if(res == 1) return true;n = res;}if(n == 1) return true;return false;} };
题目描述:“也可能是 无限循环 但始终变不到 1”,直接法没有解决这个情况,所以发生了超时
那么如何判断发生了无限循环?
无限循环,那么也就是说求和的过程中,sum会重复出现。使用哈希法,来判断这个sum是否重复出现,如果重复了就是return false, 否则一直找到sum为1为止。
更正后的代码:
class Solution { public:bool isHappy(int n) {int res; //记录平方和int tmp;unordered_set<int> set;while(n > 3){res = 0;while(n){tmp = n%10;n /= 10;res = res + tmp * tmp;}if(res == 1) return true;if(set.find(res) != set.end()) return false;else set.insert(res);n = res;}if(n == 1) return true;return false;} };
1. 两数之和
O(n^2)做法:
class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {int n = nums.size();for (int i = 0; i < n; ++i){for (int j = i + 1; j < n; ++j){if (nums[i] + nums[j] == target) {return {i, j};}}}return {};} };
用map解决:
思路:以target = 9为例,遍历到数组中的3的时候,去找哈希表里是否存在6,如果存在6,就返回它的下标。
所以,我们要知道是否存在这个元素的同时,还想知道这个元素的下标,只能用map(key - value)来做哈希映射
class Solution { public:vector<int> twoSum(vector<int>& nums, int target) {unordered_map <int, int> map;for(int i = 0; i < nums.size(); i++){auto iter = map.find(target - nums[i]);if(iter != map.end()){return {iter->second, i};}map.insert(pair<int, int>(nums[i], i));}return {};} };
1.“auto iter = map.find(target - nums[i]);”中,auto关键字的作用?
auto用于自动推导变量的类型,map.find(target - nums[i])返回的是一个迭代器类型unordered_map<int,int>::iterator
具体来说:
1.如果找到了目标值:
-
返回指向找到的键值对的迭代器
-
通过这个迭代器,可以使用:
-
iter->first 访问键(key)
-
iter->second 访问值(value)
-
-
如果没找到目标值:
-
返回 map.end(),这是一个特殊的迭代器,表示到达容器的末尾
-
这就是为什么代码中要判断
if(iter != map.end())
2.“map.insert(pair<int, int>(nums[i], i));”中,pair是什么?
pair用于将两个字合成一个单元,pair<int, int>(nums[i], i)创造了一个键值对,然后插入到unordered_map中,作为映射关系。
相关文章:

代码随想录算法【Day5】
DAY5 1.熟悉哈希表的数据结构:数组、map和set,使用方法、使用场景 2.哈希表应用场景:解决给你一个元素,判断它在集合里是否出现过。 242.有效的字母异位词 本题用数组解决的。 class Solution { public:bool isAnagram(strin…...

Leetcode 3403. Find the Lexicographically Largest String From the Box I
Leetcode 3403. Find the Lexicographically Largest String From the Box I 1. 解题思路2. 代码实现 题目链接:3403. Find the Lexicographically Largest String From the Box I 1. 解题思路 这一题我一开始的思路是想用动态规划,结果发现想复杂了&…...

【游戏设计原理】36 - 环境叙事
一、 分析并总结 核心要点 环境叙事的本质:将游戏的设定视为叙事的一部分,利用环境元素(如物品、对话、视觉效果等)传递故事和信息。世界设定的重要性:一个强大的世界设定可以像角色一样,驱动叙事并增强玩…...

Python 中的 lambda 函数和嵌套函数
Python 中的 lambda 函数和嵌套函数 Python 中的 lambda 函数和嵌套函数Python 中的 lambda 函数嵌套函数(内部函数)封装辅助函数闭包和工厂函数 Python 中的 lambda 函数和嵌套函数 Python 中的 lambda 函数 Lambda 函数是基于单行表达式的匿名函数。…...

语言模型评价指标
1. BLEU(Bilingual Evaluation Understudy) 目标:衡量生成文本和参考文本之间的词汇相似性。 计算步骤: N-gram 匹配: 将生成文本和参考文本分解成 1-gram、2-gram、…、N-gram(通常取到 4-gramÿ…...

工程师 - MSYS2介绍
https://www.msys2.org/ MSYS2 是一系列工具和库,为您提供了一个易于使用的环境,用于构建、安装和运行本地 Windows 软件。 MSYS2 is a collection of tools and libraries providing you with an easy-to-use environment for building, installing an…...

算法基础三:插入排序
定义 插入排序(英语:Insertion Sort)是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用…...

小米汽车加速出海,官网建设引领海外市场布局!
面对国内市场的饱和态势,中国企业出海步伐纷纷加速,小米也是其中的一员。Canalys数据显示,2024年第三季度,小米以13.8%的市场份额占比,实现了连续17个季度位居全球前三的成绩。 据“36 氪汽车”报道,小米汽…...

Python Polars快速入门指南:LazyFrames
前文已经介绍了Polars的Dataframe, Contexts 和 Expressions,本文继续介绍Polars的惰性API。惰性API是该库最强大的功能之一,使用惰性API可以设定一系列操作,而无需立即运行它们。相反,这些操作被保存为计算图,只在必要…...

什么是网络安全(Cybersecurity)?
不同组织机构对网络安全(Cybersecurity或Cyber Security)的定义不尽相同。从目标上来说,网络安全主要用于保护网络、计算机、移动设备、应用程序及数据等资产免受网络攻击,避免造成数据泄露、业务中断等安全问题。 网络钓鱼、勒索…...

VBA批量插入图片到PPT,一页一图
Sub InsertPicturesIntoSlides()Dim pptApp As ObjectDim pptPres As ObjectDim pptSlide As ObjectDim strFolderPath As StringDim strFileName As StringDim i As Integer 设置图片文件夹路径strFolderPath "C:\您的图片文件夹路径\" 请替换为您的图片文件夹路径…...

Pandas-DataFrame入门
文章目录 一. Pandas DataFrame简介二. 加载数据集1. 目的2. 步骤① 导包② 加载csv③ 查看数据类型及属性④ Pandas与Python常用数据类型对照 三. 查看部分数据1. 根据列名加载部分列数据① 加载一列数据,通过df[列名]方式获取② 加载多列数据,通过df[[…...

爬虫 - 爬取王者荣耀所有皮肤图片
结果展示 安装 pip install requests logger代码 import json import os import re from concurrent.futures import ThreadPoolExecutorimport requests from loguru import loggerdef parse_url(url, bFalse):try:headers {"User-Agent": "Mozilla/5.0 (Wi…...

【畅购商城】购物车模块之查看购物车
目录 分析 接口 后端实现 前端实现:显示页面 前端实现:显示购物车信息 分析 用户如果没有登录,购物车存放在浏览器端的localStorage处,且以数组的方式进行存储。用户如果登录了,购物车存放在redis中,…...

Spring Boot 学习笔记
学习代码第一步:如何写 Hello world ? 1、新建项目 新建一个 Maven Java 工程,在 pom.xml 文件中添加 Spring Boot Maven 依赖: <parent><groupId>org.springframework.boot</groupId><artifactId>spri…...

快速打造智能应用:从设计到上线的全流程指南
随着人工智能技术的快速发展,如何将大模型技术转化为实际应用成为了各行业关注的焦点。本文将以一个经典的 RAG(检索增强生成)知识问答系统为例,详细介绍从智能体设计到最终应用部署的全流程。通过结合阿里云的魔笔低代码平台和丰…...

Java-将一个大列表均分成多个小列表,每个小列表包含10个元素
要将一个大列表均分成多个小列表,每个小列表包含10个元素,可以使用多种方法。以下是几种常 见的方法: 方法一:使用 subList 这是你已经提到的方法,通过 subList 来获取子列表。 import java.util.ArrayList; import java.util.List;public class BatchProcessingExamp…...

tcp_rcv_synsent_state_process函数
tcp_rcv_synsent_state_process 是 Linux Kernel 中用于处理 TCP 连接在 SYN-SENT 状态下接收到报文的函数。这个函数在 TCP 三次握手阶段起到了至关重要的作用,处理了在客户端发送 SYN 请求之后收到服务器响应报文的各种情况。 以下是这个函数的解读和剖析: int tcp_rcv_sy…...

关于无线AP信道调整的优化(锐捷)
目录 一、信道优化的基本原则二、2.4G频段信道优化三、5G频段信道优化四、信道优化代码具体示例五、其他优化措施 一、信道优化的基本原则 信道优化旨在减少信道间的干扰,提高网络覆盖范围和信号质量。基本原则包括: 1. 选择合适的信道:根据…...

C#编写的金鱼趣味小应用 - 开源研究系列文章
今天逛网,在GitHub中文网上发现一个源码,里面有这个金鱼小应用,于是就下载下来,根据自己的C#架构模板进行了更改,最终形成了这个例子。 1、 项目目录; 2、 源码介绍; 1) 初始化; 将样…...

计算机网络|数据流向剖析与分层模型详解
文章目录 一、网络中的数据流向二、计算机网络通信模型1.OSI 模型2.TCP/IP 模型3.TCP/IP五层模型3.1 分层架构描述3.2各层地址结构3.3UDP数据包报头结构 三、总结 一、网络中的数据流向 在计算机网络中,数据的流向是指数据从发送端到接收端的传输路径。数据流向涉及…...

某些iphone手机录音获取流stream延迟问题 以及 录音一次第二次不录音问题
一些型号的iphone手机录音获取流stream延迟问题 以及 录音一次第二次不录音问题 延迟问题 navigator.mediaDevices.getUserMedia({ audio: true }) .then((stream) > {console.log(stream) })从开始到获取stream会有将近2s的延迟 导致按下按钮开始录音 会有前…...

gazebo_world 基本围墙。
如何使用? 参考gazebo harmonic的官方教程。 本人使用harmonic的template,在里面进行修改就可以分流畅地使用下去。 以下是world 文件. <?xml version"1.0" ?> <!--Try sending commands:gz topic -t "/model/diff_drive/…...

Ubuntu 上高效实现 Texlive 安装和管理
文章目录 介绍操作步骤1. 下载 Texlive 安装包2. 解压安装包3. 安装基础安装命令通用的 scheme 选项 4. 配置环境变量 使用 tlmgr 管理包总结 介绍 Texlive 是学术和技术文档编写的重要工具, 选择适合的安装方案能帮助您提升效率并减少磁盘空间占用. 本文将为您提供在 Ubuntu …...

LeetCOde914 卡牌分组
扑克牌分组问题:探索最大公约数的应用 在编程的世界里,我们经常会遇到各种有趣的算法问题,今天要和大家分享的是一道关于扑克牌分组的问题,它巧妙地运用了最大公约数的概念来解决。 一、问题描述 给定一副牌,每张牌…...

MicroDiffusion——采用新的掩码方法和改进的 Transformer 架构,实现了低预算的扩散模型
介绍 论文地址:https://arxiv.org/abs/2407.15811 现代图像生成模型擅长创建自然、高质量的内容,每年生成的图像超过十亿幅。然而,从头开始训练这些模型极其昂贵和耗时。文本到图像(T2I)扩散模型降低了部分计算成本&a…...

QWT 之 QwtPlotDirectPainter直接绘制
QwtPlotDirectPainter 是 Qwt 库中用于直接在 QwtPlot 的画布上绘制图形的一个类。它提供了一种高效的方法来实时更新图表,特别适合需要频繁更新的数据可视化应用,例如实时数据流的显示。 使用 QwtPlotDirectPainter 的主要优势在于它可以绕过 QwtPlot 的…...

埃斯顿机器人程序案例多个点位使用变量
多个点位使用变量取放...

【数据分析】贝叶斯定理
文章目录 一、贝叶斯定理的基本形式二、贝叶斯定理的推导三、贝叶斯定理的应用四、贝叶斯定理的优势与挑战 贝叶斯定理(Bayes Theorem)是概率论中的一个重要公式,它提供了一种根据已有信息更新事件发生概率的方式。贝叶斯定理的核心思想是通过…...

学AI编程的Prompt工程,marscode
利用marscode做个创意应用 Datawhale-AI活动 首先把自己的创意告诉marscode,marscode会针对你的创意开始写代码。如果在把创意给marscode前有更好的梳理,会有更好的结果。 对于一个新开始的项目,只需要点击apply进行应用 由于ai的效果不稳定…...