当前位置: 首页 > news >正文

代码随想录算法【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类型进行算术运算时,会发生如下转换:

  1. 在算术运算之前,char类型会被自动提升(promoted)为int类型

  2. 这种转换叫做"整型提升"(integral promotion)

  3. 所以两个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,包含这两个迭代器之间的所有元素。

这行代码做了以下事情:

  1. 创建一个新的 vector<int> 对象

  2. 使用 result_set 的开始迭代器(begin())和结束迭代器(end())

  3. 将 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)

  1. 如果没找到目标值:

  • 返回 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.熟悉哈希表的数据结构&#xff1a;数组、map和set&#xff0c;使用方法、使用场景 2.哈希表应用场景&#xff1a;解决给你一个元素&#xff0c;判断它在集合里是否出现过。 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. 代码实现 题目链接&#xff1a;3403. Find the Lexicographically Largest String From the Box I 1. 解题思路 这一题我一开始的思路是想用动态规划&#xff0c;结果发现想复杂了&…...

【游戏设计原理】36 - 环境叙事

一、 分析并总结 核心要点 环境叙事的本质&#xff1a;将游戏的设定视为叙事的一部分&#xff0c;利用环境元素&#xff08;如物品、对话、视觉效果等&#xff09;传递故事和信息。世界设定的重要性&#xff1a;一个强大的世界设定可以像角色一样&#xff0c;驱动叙事并增强玩…...

Python 中的 lambda 函数和嵌套函数

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

语言模型评价指标

1. BLEU&#xff08;Bilingual Evaluation Understudy&#xff09; 目标&#xff1a;衡量生成文本和参考文本之间的词汇相似性。 计算步骤&#xff1a; N-gram 匹配&#xff1a; 将生成文本和参考文本分解成 1-gram、2-gram、…、N-gram&#xff08;通常取到 4-gram&#xff…...

工程师 - MSYS2介绍

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

算法基础三:插入排序

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

小米汽车加速出海,官网建设引领海外市场布局!

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

Python Polars快速入门指南:LazyFrames

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

什么是网络安全(Cybersecurity)?

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

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. 根据列名加载部分列数据① 加载一列数据&#xff0c;通过df[列名]方式获取② 加载多列数据&#xff0c;通过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…...

【畅购商城】购物车模块之查看购物车

目录 分析 接口 后端实现 前端实现&#xff1a;显示页面 前端实现&#xff1a;显示购物车信息 分析 用户如果没有登录&#xff0c;购物车存放在浏览器端的localStorage处&#xff0c;且以数组的方式进行存储。用户如果登录了&#xff0c;购物车存放在redis中&#xff0c…...

Spring Boot 学习笔记

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

快速打造智能应用:从设计到上线的全流程指南

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

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频段信道优化四、信道优化代码具体示例五、其他优化措施 一、信道优化的基本原则 信道优化旨在减少信道间的干扰&#xff0c;提高网络覆盖范围和信号质量。基本原则包括&#xff1a; 1. 选择合适的信道&#xff1a;根据…...

C#编写的金鱼趣味小应用 - 开源研究系列文章

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

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

spring:实例工厂方法获取bean

spring处理使用静态工厂方法获取bean实例&#xff0c;也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下&#xff1a; 定义实例工厂类&#xff08;Java代码&#xff09;&#xff0c;定义实例工厂&#xff08;xml&#xff09;&#xff0c;定义调用实例工厂&#xff…...

IT供电系统绝缘监测及故障定位解决方案

随着新能源的快速发展&#xff0c;光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域&#xff0c;IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选&#xff0c;但在长期运行中&#xff0c;例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

GraphQL 实战篇:Apollo Client 配置与缓存

GraphQL 实战篇&#xff1a;Apollo Client 配置与缓存 上一篇&#xff1a;GraphQL 入门篇&#xff1a;基础查询语法 依旧和上一篇的笔记一样&#xff0c;主实操&#xff0c;没啥过多的细节讲解&#xff0c;代码具体在&#xff1a; https://github.com/GoldenaArcher/graphql…...