23.哀家要长脑子了!

目录

1.290. 单词规律 - 力扣(LeetCode)

 2.532. 数组中的 k-diff 数对 - 力扣(LeetCode)

3.205. 同构字符串 - 力扣(LeetCode)

4.138. 随机链表的复制 - 力扣(LeetCode)

5.599. 两个列表的最小索引总和 - 力扣(LeetCode


1.290. 单词规律 - 力扣(LeetCode)

怎么打简单的标签,我第一反应是无从下手,不知所措。。。

这道题有两个要注意的点:一个是双向映射,一个是字符串中单词的分割

是这样一个思路: 

用两个map,一个map ps记录从pattern到s的映射,一个map sp记录从s到pattern的映射

start代表字符串s中某个单词的开头,end表示结尾

for循环遍历关规律pattern中的每个字母,如果进入循环后,发现单词的起点已经大于s的长度,说明字符串s中的每个单词已经遍历完毕,但是pattern还没有遍历完毕(因为进入了for循环)说明s的长度大于pattern,out。

接下来就是分割单词:当 end小于字符串s的长度并且此时位置上的元素不为空格,说明这个单词还没找完整,end后移继续查找完整。当end大于字符串s的长度,说明字符串s中最后一个单词找完整的;当end小于s的长度,但是此时位置上的元素为空格,说明s中的某一个单词查找完毕。

判断双向映射:如果此时的pattern字符中的ch已经在ps中存在,但是这个ch所映射的单词跟我们上面提取的单词不一样。out。或者此时的单词作为的索引所映射的字符跟我们现在遍历到的字符不一样,out。

一定要两个映射表都判断一下,因为要判断双向一致,比如下面这个样例

pattern = "abba"  s = "dog dog dog dog"

 如果只判断一个映射表ps的话:只能知道a对应dog,b也对应dog,是对的,不会返回false

但实际上我们需要唯一的映射,a对应dog,b不能对应dog了,out。

判断完之后:将此时新的这个映射关系加入到两边的映射表中

更新单词的起点终点:新一个单词的起点是上一个单词终点的下一位(单词的起点终点唯一同一位置开始遍历,起点索引不懂,终点索引去找终点

规律pattern遍历完毕后,如果最后一轮遍历所更新的起点的索引正好等于字符串s的长度加1。说明单词个数正好也等于规律中的字符个数。

class Solution {
public:bool wordPattern(string pattern, string s) {unordered_map<char, string> ps;unordered_map<string, char> sp;int n = pattern.size(), m = s.size(), start = 0, end = 0;string word;char ch;for(int i = 0; i < n; i++){if(start > m) return false;while(end < m && s[end] != ' ') end++;word = s.substr(start, end - start);    ch = pattern[i];if(ps.count(ch) && ps[ch] != word || sp.count(word) && sp[word] != ch){return false;}ps[ch] = word;sp[word] = ch;start = end + 1;end = start;  }return start == m + 1;}
};
 2.532. 数组中的 k-diff 数对 - 力扣(LeetCode)

 首先我自己做就是用个set,然后加上差值看set中有没有对应需要的值,有点像前几天的两数之和,但是这样的话处理0或者负数元素就会出错。因为k是题目要求的差值的绝对值。

| nums[i] - nums[j] | = k 

k为正数:nums[j] = nums[i] - k

k为负数:nums[j] = nums[i] + k

是这样的:用两个set,一个set用来满足条件的数值对,到时候返回它的长度就好了,另一个set用来判断此时正在遍历的元素满足题目条件所需对应数字num-k有没有在原数组中(题目有要求)

num是此时数组正在遍历的元素,num-k是满足题目要求所对应的数字。如果num-k在vis中,说明num是正数,并且原数组nums中有这样两个数字可以构成一组数对来满足题目要求。把对应的num-k数字放到结果数组中。如果num+k在数组中,说明num是负数,并且原数组nums中有这样两个数字可以构成一组数对来满足题目要求。把对应的num数字放到结果数组中。最后把当前正在遍历的num放入vis中,代表原数组中有这个数字,可以参与构成数对。每次都放比较小的那个元素,其实我有点疑惑,但是还没有彻底弄懂了。

class Solution {
public:int findPairs(vector<int>& nums, int k) {unordered_set<int> res;unordered_set<int> vis;for(const int& num : nums){if(vis.count(num - k)){    res.insert(num - k);}if(vis.count(num + k)){res.insert(num);}vis.insert(num);}return res.size();}
};
3.205. 同构字符串 - 力扣(LeetCode)

跟第一题一样的思路,但是我先判断了数组长度,不一样最喜欢i直接返回。out

class Solution {
public:bool isIsomorphic(string s, string t) {int n = s.size(), m = t.size();unordered_map<char, char> st;unordered_map<char, char> ts;if(n != m) return false;for(int i = 0; i < n; i++){if(st.count(s[i]) && st[s[i]] != t[i] || ts.count(t[i]) && ts[t[i]] != s[i] ){return false;}st[s[i]] = t[i];ts[t[i]] = s[i];}return true; }
};
4.138. 随机链表的复制 - 力扣(LeetCode)

 其实我觉得这道题还挺有意思的,就是这个random的存在,一开始我还没看懂这个题目有什么不同,我发现有时候我老是看不出题目的意思,读不懂题意。

这个题目关键的就是这个random,我们复制链表的时候,可能此时这个结点random指向的结点还没有被创建,如果被创建了又应该怎样记录呢。此时就用哈希表。

首先建立一个 还没有任何关系的哈希表,里面只是一个个结点,结点之间没有任何的指针指向。

接着用指向原链表的cur指针开始建立映射关系了。

 哎哟,其实我还是有点懵懵懂懂,模模糊糊

class Solution {
public:Node* copyRandomList(Node* head) {if(!head) return head;Node *cur = head;unordered_map<Node*, Node*> map;while(cur){map[cur] = new Node(cur->val);cur = cur->next;}    cur = head;while(cur){map[cur]->next = map[cur->next];map[cur]->random = map[cur->random];cur = cur->next;     }return map[head];}
};
5.599. 两个列表的最小索引总和 - 力扣(LeetCode)

 用一个map来操作记录他们之间的索引关系。把lsit1中的元素作为map的索引,list1中元素的下标作为map中的值。然后list2中的元素作为索引去操作去匹配。

class Solution {
public:vector<string> findRestaurant(vector<string>& list1, vector<string>& list2) {unordered_map<string, int> map;for(int i = 0; i < list1.size(); i++){map[list[i]] = i;}int sum = INT_MAX;vector<string> res;for(int i = 0; i < list2.size(); i++){// 如果有相同的餐厅if(map.count(list2[i])){int j = map[list2[i]];// 如果发现有更小的索引和if(i + j < sum){// 清空原来记录的结果res.clear();// 记录此时更小的索引和所对应得餐厅res.push_back(list2[i]);// 记录新的索引和sum = i + j;}    // 如果索引和是最小的else if(i + j == sum){// 记录一下辣res.push_back(list2[i]);        }            }return res;}
};

啊啊啊啊,我这被饼干操纵的一生。。。

是这样,昨天我晚饭吃的一个茶叶蛋,一包徐福记岩板烧,一个鸡蛋香松面包,然后昨天我又想逃避vue,又看不下软考,我就去吃了个烤全翅,好难吃,我还吃了个徐福记三包饼干,然后我又吃了个芋泥饼干,我又吃了徐福记三包饼干和一个牛肉干,还有四分之三的早茶饼干。嗯。。今天早上吃的是一碗蛋炒粉(放了蒜末,酸豆角,葱和很多很多的醋)全吃完了,嗯。还有徐福记三包饼干,一个香干,一个盐焗鸭蛋,昨天剩下的四分之一饼干,还有一瓶豆奶。小姐姐你挺能吃的。。

5.3开始写的。。。 

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

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

相关文章

解决layui的bug 在layui tree 组件中 禁用选中父节点后自动选中子节点功能

最近做权限管理后台&#xff0c;用了layui tree 组件&#xff0c;发现选中了父节点后&#xff0c;自动选中了子节点。不满足现实业务需求。所以微调了下源代码。 在用树形组件中&#xff0c;在用文档中 tree.setChecked(demoId, [2, 3]); //批量勾选 id 为 2、3 的节点 用这句…

VS code 同步odata服务

在做UI5得开发过程中&#xff0c;经常会出现odata需要更新 那么已经加载过得项目如何去跟新odata服务呢 可以通过如下步骤 1.右键打开应用信息 2.找到manage service models 3.点击编辑 4.选中 刷新并保存

Java毕业设计 基于SSM SpringBoot vue宠物领养平台

Java毕业设计 基于SSM SpringBoot vue宠物领养平台 SSM 宠物领养平台 功能介绍 首页 图片轮播 新闻信息 新闻类型 新闻详情 宠物百科 宠物百科类型 宠物百科详情 宠物 宠物类型 宠物详情 立即领养 留言 论坛 发布帖子 登录 个人中心 宠物收藏 宠物领养订单 后台管理 登录注…

YOLO自研模块:多尺度轻量化卷积模块

目录 一、原理 二、代码 三、配置文件 一、原理 不同大小的卷积核,提取目标特征的特征尺度不同,所以通过使用不同大小卷积核的卷积来提取特征就可以保证获取到目标的多尺度特征。 借鉴YOLOv8中,将通道数进行划分的操作,在卷积的输入过程中为了减小参数量,将输入通道数…

spring框架学习记录(1)

前半个月一直在应付期中考试&#xff0c;快被折磨似了orz 文章目录 SpringIoC(Inversion of Control) 控制反转与DI(Dependency Injection)依赖注入bean相关bean配置bean实例化bean的生命周期 依赖注入相关依赖注入方式依赖自动装配 容器创建容器获取bean Spring IoC(Inversi…

ClickHouse高原理与实践

ClickHouse高原理与实践 1 ClickHouse的特性1.1. OLAP1.2. 列式存储1.3. 表引擎1.4. 向量化执行1.5. 分区1.6. 副本与分片1.7 其他特性 2. ClickHouse模块设计2.1 Parser分析器与Interpreter解释器2.2 Storage2.3 Column与Field2.4 DataType2.5 Block2.6 Cluster与Replication …

【云原生】Docker 实践(二):什么是 Docker 的镜像

【Docker 实践】系列共包含以下几篇文章&#xff1a; Docker 实践&#xff08;一&#xff09;&#xff1a;在 Docker 中部署第一个应用Docker 实践&#xff08;二&#xff09;&#xff1a;什么是 Docker 的镜像Docker 实践&#xff08;三&#xff09;&#xff1a;使用 Dockerf…

Vue3-element-plus表格

一、element-plus 1.用组件属性实现跳转路由 <el-menu active-text-color"#ffd04b" background-color"#232323" :default-active"$route.path" //高亮 text-color"#fff"router><el-menu-item index"/article/channe…

活动回顾 | 春起潮涌——硬件驱动的量化交易与AI

4月20日&#xff0c;华锐技术ACLUB联合AMD在上海举办了“春起潮涌——硬件驱动的量化交易与AI”沙龙活动&#xff0c;会议围绕FPGA硬件加速、CPU&网卡调优、AI技术应用等展开&#xff0c;近50位量化IT与分享嘉宾一起探讨硬件技术在量化交易和AI领域的应用和创新。 FPGA在交…

AC自动机

AC自动机 AC自动机有一个很出色的功能&#xff1a;实现多模式匹配。 多模式匹配&#xff1a;模式串有多个&#xff0c;主串只有一个&#xff0c;要进行多次模式串匹配。如果用KMP就要一个一个模式串进行匹配&#xff0c;效率低。AC自动机就可以做到&#xff0c;只要经过一些预…

学习Rust的第22天:mini_grep第2部分

书接上文&#xff0c;在本文中&#xff0c;我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试&#xff0c;我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念&#xff0c;例如错误处理、环境…

Iterator迭代器接口介绍

Iterator迭代器接口介绍 Collection接口继承了Iterable接口&#xff0c;在接口中包含一个名为iterator的抽象方法&#xff0c;所以实现了Collection接口的容器类对该方法做了具体实现。iterator方法会返回一个Iterator接口类型的迭代器对象&#xff0c;在该对象中包含了三个方…

虹科Pico汽车示波器 | 免拆诊断案例 | 起动机免拆诊断故障 2 例

电磁开关、换向器烧蚀及炭刷磨损均会导致起动机偶尔不工作&#xff0c;使发动机偶尔无法起动。由于故障是偶发的&#xff0c;且没有故障代码&#xff0c;这往往会让维修人员无从下手&#xff0c;而用Pico示波器测量起动电流&#xff0c;就会让这些“亚健康状态”一目了然。 案例…

介绍BCD码

BCD码&#xff08;Binary-Coded Decimal‎&#xff09;&#xff0c;用4位 二进制数 来表示1位 十进制数 中的0~9这10个数码&#xff0c;是一种二进制的数字编码形式&#xff0c;用 二进制编码的十进制 代码。 BCD码这种编码形式利用了四个位元来储存一个十进制的数码&#xff0…

openlayer 使用ol-ext插件实现凸显区域

使用ol-ext插件实现凸显多变形 效果如图 1、创建openlayer var map; var view; var tileLayer, source, vector;function init() {tileLayer new ol.layer.Tile({source: new ol.source.TileArcGISRest({url: "http://map.geoq.cn/arcgis/rest/services/ChinaOnlineStr…

组合数问题

1.直接用递推&#xff1a; 下面是AC代码“&#xff1a; #include<bits/stdc.h> using namespace std; const int N2010,mod1e97; int a[N][N]; void init() {for(int i0;i<N;i){for(int j0;j<i;j){if(j0) a[i][j]1;else a[i][j](a[i-1][j]a[i-1][j-1])%mod;}} } i…

Stm32CubeMX 为 stm32mp135d 添加 adc

Stm32CubeMX 为 stm32mp135d 添加 adc 一、启用设备1. adc 设备添加2. adc 引脚配置2. adc 时钟配置 二、 生成代码1. optee 配置 adc 时钟和安全验证2. linux adc 设备 dts 配置 bringup 可参考&#xff1a; Stm32CubeMX 生成设备树 一、启用设备 1. adc 设备添加 启用adc设…

指令寻址——顺序寻址、跳跃寻址

目录 一、概述 1.定义 2.寻址方式分类 3.形式地址、物理地址 二、指令寻址 1、顺序寻址方式 2、跳跃寻址方式 一、概述 1.定义 寻址方式解决的是指如何在指令中表示一个操作数的地址&#xff0c;如何用这种表示得到操作数、或怎样计算出操作数的地址。 2.寻址方式分类…

ElasticSearch教程入门到精通——第一部分(基于ELK技术栈elasticsearch 8.x新特性)

ElasticSearch教程入门到精通——第一部分&#xff08;基于ELK技术栈elasticsearch 8.x新特性&#xff09; 1. ElasticSearch安装&#xff08;略&#xff09;2. ElasticSearch基础功能2.1 索引操作2.1.1 创建索引2.1.2 Head 索引2.1.3 查询索引2.1.3.1 查询单独索引2.1.3.2 查询…

linus下Anaconda创建虚拟环境pytorch

一、虚拟环境 1.创建 输入下面命令 conda create -n env_name python3.8 输入y 2.激活环境 输入 conda activate env_name 二、一些常用的命令 在Linux的控制平台 切换到当前的文件夹 cd /根目录/次目录 查看conda目录 conda list 查看pip目录 pip list查看历史命…