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.mfbz.cn/a/592060.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot与OpenCV:融合机器学习的智能图像与视频处理平台

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

VMware虚拟机中ubuntu使用记录(6)—— 如何标定单目相机的内参(张正友标定法)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、张正友相机标定法1. 工具的准备2. 标定的步骤(1) 启动相机(2) 启动标定程序(3) 标定过程的操作(5)可能的报错 3. 标定文件内容解析 前言 张正友相机标定法…

什么是PWM?

1.PWM也叫做脉冲宽度调制&#xff0c;它是一种模拟控制方式&#xff0c;根据相应 载荷 的变化来调制晶体管基级和MOS管栅极的偏置&#xff0c;来实现 晶体管 或 MOS管 导通时间的改变&#xff0c;从而实现开关稳压电源输出的改变。 这种方式能使电源的输出电压在工作条件变化时…

linux的基础入门(2)

环境变量 在Shell中&#xff0c;正确的赋值语法是没有空格的&#xff0c;即变量名数值。所以&#xff0c;正确的方式是&#xff1a; tmpshy 这样就将变量tmp赋值为"shy"了。 注意&#xff1a;并不是任何形式的变量名都是可用的&#xff0c;变量名只能是英文字母、…

Reac19 升级指南

Reactv19 已经发布 beta 版本&#xff0c;想要快速体验如何升级到 v19 版本尝鲜的朋友们可以查阅进行了解 前言 React 已于近日发布了 v19 的 beta 版本&#xff0c;同时为了帮助后续的 v19 升级&#xff0c;也同时发布了 v18.3.0的正式版&#xff0c; 与 v18.2 版本完全相同…

JavaEE初阶Day 15:文件IO(1)

目录 Day 15&#xff1a;文件IO&#xff08;1&#xff09;IO文件1. 路径2. 文件的分类3. 使用Java针对文件系统进行操作3.1 属性3.2 构造方法3.3 方法 Day 15&#xff1a;文件IO&#xff08;1&#xff09; IO I&#xff1a;Input输入 O&#xff1a;Output输出 输入输出规则…

【golang-ent】go-zero框架 整合 ent orm框架实现一对一 一对多 多种姿势查询方式

一、ent的 O2O 问题 官方文档如下: https://entgo.io/zh/docs/schema-edges#o2o-same-type 1、ent O2O问题 官方提供了三种 one2one的方式,可以看到他全部使用了 mysql的 foregionKey 的方式进行关联,虽然举例了单表和双表的不同使用方式,但是我们实际使用mysql中是不创建…

深度解析 Spring 源码:探寻Bean的生命周期

文章目录 一、 Bean生命周期概述二、Bean生命周期流程图三、Bean生命周期验证3.1 代码案例3.2 执行结果 四、Bean生命周期源码4.1 setBeanName()4.2 setBeanFactory()4.3 setApplicationContext()4.4 postProcessBeforeInitialization()4.5 afterPropertiesSet()4.6 postProces…

银行数字化转型导师坚鹏:银行数字化转型5大战略定位

银行数字化转型必须建立清晰的战略定位&#xff0c;可以从以下5个方面建立&#xff0c;使广大银行员工明白银行数字化转型的重要性。 1.国家战略落地的重要抓手 银行是中国金融体系的核心&#xff0c;银行是做好“科技金融、绿色金融、普惠金融、养老金融和数字金融‘五篇大文…

【c++】继承学习(二):探索 C++ 中派生类的默认机制与静态成员共享

&#x1f525;个人主页&#xff1a;Quitecoder &#x1f525;专栏&#xff1a;c笔记仓 目录 1.派生类的默认成员函数2.继承与友元3.继承与静态成员 朋友们大家好&#xff0c;本篇文章我们来学习继承的第二部分 1.派生类的默认成员函数 来看下面的类&#xff1a; class Person…

【自留】运行一个开源项目

运行一个开源项目 首先是运行起来 1. 拿到地址 拿到你想要的项目的地址 2. 克隆 打开编辑器 VSCode &#xff0c;创建一个放项目的文件夹&#xff0c;控制台输入以下代码克隆项目 git clone 克隆地址gitee克隆地址在这看&#xff1a; github上项目的话&#xff0c;在这…

【python的魅力】:教你如何用几行代码实现文本语音识别

文章目录 引言一、运行效果二、文本转换为语音2.1 使用pyttsx32.2 使用SAPI实现文本转换语音2.3 使用 SpeechLib实现文本转换语音 三、语音转换为文本3.1 使用 PocketSphinx实现语音转换文本 引言 语音识别技术&#xff0c;也被称为自动语音识别&#xff0c;目标是以电脑自动将…

SSM+Vue+小程序+基于微信小程序的高校学生事务管理系统

项目配合学校日常生活通知&#xff0c;考试等管理需要&#xff0c;开发学校事务管理系统&#xff0c;maven管理依赖&#xff0c;mybatis处理数据库交互 学校管理 学院管理 班级管理 年级管理 教师管理 通知公告管理 学生资料管理 待办事项管理 教务处通知管理 讲座通…

【Conda】解决无名虚拟环境问题

文章目录 问题描述&#xff1a;无名虚拟环境解决步骤1 添加虚拟环境目录到envs步骤2 成功命名 问题描述&#xff1a;无名虚拟环境 如果不指定创建目录&#xff0c;默认创建在C盘用户目录下&#xff0c;这应该是很多人不愿意的吧。 指定目录创建虚拟环境命令如下&#xff1a; …

vector的使用

1.构造函数 void test_vector1() {vector<int> v; //无参的构造函数vector<int> v2(10, 0);//n个value构造&#xff0c;初始化为10个0vector<int> v3(v2.begin(), v2.end());//迭代器区间初始化,可以用其他容器的区间初始化vector<int> v4(v3); //拷贝…

基于yolov8的苹果腐败检测系统,系统既支持图像检测,也支持视频和摄像实时检测(pytorch框架)【python源码+UI界面+功能源码详解】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示&#xff1a; 基于yolov8的苹果腐败检测系统&#xff0c;系统既支持图像检测&#xff0c;也支持视频和摄像实时检测_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于yolov8的苹果腐败检测系统是在pytorc…

STM32 F103C8T6学习笔记17:类IIC通信(SMBus协议)—MLX90614红外非接触温度计

今日学习配置MLX90614红外非接触温度计 与 STM32 F103C8T6 单片机的通信 文章提供测试代码讲解、完整工程下载、测试效果图 本文需要用到的大概基础知识&#xff1a;1.3寸OLED配置通信显示、IIC通信、 定时器配置使用 这里就只贴出我的 OLED驱动方面的网址链接了&#xff1a…

Golang数组与切片

文章目录 数组数组介绍数组的定义方式访问与修改数组元素遍历数组元素数组指针 切片切片介绍切片的定义方式访问与修改切片元素添加切片元素切片的拷贝遍历切片元素string的切片 数组 数组介绍 数组介绍 在Go中&#xff0c;数组是一个由固定长度的特定类型元素组成的序列&…

[Algorithm][队列][宽搜BFS][N叉树的层序遍历][二叉树的锯齿形层序遍历][二叉树最大宽度][在每个树行中找最大值]详细讲解

目录 1.N 叉树的层序遍历1.题目链接2.算法思路详解3.代码实现 2.二叉树的锯齿形层序遍历1.题目链接2.算法原理详解3.代码实现 3.二叉树最大宽度1.题目链接2.算法原理详解3.代码实现 4.在每个树行中找最大值1.题目链接2.算法原理详解3.代码实现 1.N 叉树的层序遍历 1.题目链接 …

数据结构之链表深度讲解

小伙伴们&#xff0c;大家好呀&#xff0c;上次听我讲完顺序表想必收获不少吧&#xff0c;嘿嘿&#xff0c;这篇文章你也一样可以学到很多&#xff0c;系好安全带&#xff0c;咱们要发车了。 因为有了上一次顺序表的基础&#xff0c;所以这次我们直接进入正题&#xff0c;温馨…
最新文章