第 107 场LeetCode双周赛

news2024/11/24 22:24:47

A 最大字符串配对数目

在这里插入图片描述
在这里插入图片描述
显然各字符串对 间匹配的先后顺序不影响最大匹配数目, 可以从后往前遍历数组, 判断前面是否有和当前末尾构成匹配的.

class Solution {
public:
    int maximumNumberOfStringPairs(vector<string> &words) {
        int res = 0;        
        while (words.size() > 1) {
            auto &s = words.back();
            reverse(s.begin(), s.end());
            for (int i = words.size() - 2; i >= 0; i--)
                if (s == words[i]) {
                    res++;
                    break;
                }
            words.pop_back();
        }
        return res;
    }
};

B 构造最长的新字符串

在这里插入图片描述

记忆化搜索: 定义状态 p a a , b b , a b , l a s t p_{aa,bb,ab,last} paa,bb,ab,last为剩余三种字符串分别为aa、bb、ab个, 且上一位为last(1代表’A’, 2代表’B’)情况下, 后面可以生成的最长字符串的长度, 枚举可用的三种字符串即可.

class Solution {
public:
    int longestString(int x, int y, int z) {
        int p[x + 1][y + 1][z + 1][3];
        memset(p, -1, sizeof(p));
        function<int(int, int, int, int)> get = [&](int aa, int bb, int ab, int last) {//last: 1->A  2->B
            if (p[aa][bb][ab][last] != -1)
                return p[aa][bb][ab][last];
            p[aa][bb][ab][last] = 0;
            if (aa && last != 1)
                p[aa][bb][ab][last] = max(p[aa][bb][ab][last], 2 + get(aa - 1, bb, ab, 1));
            if (bb && last != 2)
                p[aa][bb][ab][last] = max(p[aa][bb][ab][last], 2 + get(aa, bb - 1, ab, 2));
            if (ab && last != 1)
                p[aa][bb][ab][last] = max(p[aa][bb][ab][last], 2 + get(aa, bb, ab - 1, 2));
            return p[aa][bb][ab][last];
        };
        return get(x, y, z, 0);// last!=1,2 (初始情况没有上一位)
    }
};

C 字符串连接删减字母

在这里插入图片描述
在这里插入图片描述

动态规划: 定义 p i , f r o n t , b a c k p_{i,front,back} pi,front,back为生成的首位为 f r o n t front front末位为 b a c k back back s t r i str_i stri的最长长度, 若 p i , f r o n t , b a c k p_{i,front,back} pi,front,back状态是可达的, 有两种方式对 p i + 1 , f o n t ′ , b a c k ′ p_{i+1,font',back'} pi+1,font,back进行更新(对应题中两种操作).

class Solution {
public:
    int minimizeConcatenatedLength(vector<string> &li) {
        int n = li.size();
        int p[n][26][26];//i,front,back
        for (int i = 0; i < n; i++)
            for (int j = 0; j < 26; j++)
                for (int k = 0; k < 26; k++)
                    p[i][j][k] = INT32_MAX;// 标志状态不可达
        p[0][li[0][0] - 'a'][li[0].back() - 'a'] = li[0].size();
        for (int i = 1; i <= n - 1; i++) {
            for (int front = 0; front < 26; front++) {
                for (int back = 0; back < 26; back++)
                    if (p[i - 1][front][back] != INT32_MAX) {
                        p[i][front][li[i].back() - 'a'] = min(p[i][front][li[i].back() - 'a'], p[i - 1][front][back] + (int) (li[i][0] - 'a' == back ? li[i].size() - 1 : li[i].size()));// join(str_(i-1) , li[i])
                        p[i][li[i][0] - 'a'][back] = min(p[i][li[i][0] - 'a'][back], p[i - 1][front][back] + (int) (li[i].back() - 'a' == front ? li[i].size() - 1 : li[i].size())); //join(li[i], str_(i-1))
                    }
            }
        }
        int res = INT32_MAX;
        for (int front = 0; front < 26; front++)
            for (int back = 0; back < 26; back++)
                res = min(res, p[n - 1][front][back]);
        return res;
    }
};

D 统计没有收到请求的服务器数目

在这里插入图片描述
在这里插入图片描述

离线查询+双指针: 把日志和查询放在一个有序表 l i li li中, 并按时间非降序排序, 同时保证相同时间的日志在查询之前. 之后用双指针的方法维护 l i li li中一段时间差最大为x的区间, 及该区间上不同的服务器个数为 c n t cnt cnt, 每次移动右指针遇到是查询时, 更新左指针, 对应查询的答案即为 n − c n t n-cnt ncnt.

class Solution {
public:
    vector<int> countServers(int n, vector<vector<int>> &logs, int x, vector<int> &queries) {
        vector<tuple<int, int, int>> li;// time, type(0:log ,1: query), server_id/query_index
        for (auto &i: logs)
            li.emplace_back(i[1], 0, i[0]);// time, type, server_id
        int m = queries.size();
        for (int i = 0; i < m; i++)
            li.emplace_back(queries[i], 1, i);// time, type, query_index
        sort(li.begin(), li.end());
        unordered_map<int, int> cnt_server;//cnt_server[i] 服务器i当前出现次数
        int cnt = 0;
        vector<int> res(m);
        for (int l = 0, r = 0; r < li.size(); r++) {//遍历li[r]
            if (get<1>(li[r]) == 0) {//log
                int server_id = get<2>(li[r]);
                if (cnt_server[server_id]++ == 0)
                    cnt++;
            } else {//query
                int time_cur = get<0>(li[r]), query_index = get<2>(li[r]);
                for (; get<0>(li[l]) < time_cur - x; l++) {//更新l
                    if (get<1>(li[l]) == 0) {//log
                        if (--cnt_server[get<2>(li[l])] == 0)// 维护cnt_server
                            cnt--;
                    }
                }
                res[query_index] = n - cnt;
            }
        }
        return res;
    }
};

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python基础五

目录 一、Ptyhon数据类型--元组 1.元组的注意事项 2.元组的下标 3.访问元组元素 4.拼接元组 5.删除元组 6.元组运算符 二、Python内置函数--元组相关 一、Ptyhon数据类型--元组 Python 的元组与列表类似&#xff0c;不同之处在于元组的元素不能修改&#xff0c;也不能…

chatgpt赋能python:Python编写预警系统——保障企业安全的得力工具

Python编写预警系统——保障企业安全的得力工具 随着互联网应用的发展&#xff0c;企业所要面对的风险和威胁也与日俱增&#xff0c;预警系统的作用在保障企业安全中越来越显著。Python编写预警系统&#xff0c;成为了许多企业和团队的首选&#xff0c;具有方便快捷、灵活多样…

【软考网络管理员】2023年软考网管初级常见知识考点(13)-ARP、ICMP、IPv6协议详解

#涉及知识点 ARP协议详解、ICMP协议详解、IPv6协议等软考内容详解 软考网络管理员常考知识点&#xff0c;软考网络管理员网络安全&#xff0c;网络管理员考点汇总。 原创于&#xff1a;CSDN博主-《拄杖盲学轻声码》&#xff0c;更多考点汇总可以去他主页查看 文章目录 前言一、…

浅析AI深度学习计算机视觉技术在智能监控领域的场景应用

计算机视觉技术是一种模拟人类视觉功能的技术&#xff0c;通过数字图像处理、模式识别、机器学习等方法&#xff0c;自动分析和理解图像和视频中的信息&#xff0c;从而实现图像和视频的自动理解、识别、分类、检测和跟踪等任务。 计算机视觉技术的使用场景非常广泛&#xff0…

第十四章 Vision Transformer网络详解

系列文章目录 第一章 AlexNet网络详解 第二章 VGG网络详解 第三章 GoogLeNet网络详解 第四章 ResNet网络详解 第五章 ResNeXt网络详解 第六章 MobileNetv1网络详解 第七章 MobileNetv2网络详解 第八章 MobileNetv3网络详解 第九章 ShuffleNetv1网络详解 第十章…

Presto 之Cross Join消除的实现

一. 前言 Cross Join是指无条件的join。因为Cross Join的代价为笛卡尔乘积&#xff0c;代价很大&#xff0c;因此在Presto的执行优化中&#xff0c;会尽量消除掉Cross Join。Presto Cross Join的消除原理主要是尽可能通过对Join表的重新排序实现将Cross Join转换为Inner Join。…

Python基础六

目录 一、Python数据类型--字典 1.访问字典里的值 2.修改字典 3.删除字典元素 4.字典键的特性 二、Python内置函数--字典相关 一、Python数据类型--字典 字典是另一种可变容器模型&#xff0c;且可存储任意类型对象。 字典的每个键值 key>value 对用冒号 : 分割&#…

Tesla EDI 项目数据库方案开源介绍

近期为了帮助广大用户更好地使用 EDI 系统&#xff0c;我们根据以往的项目实施经验&#xff0c;将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后&#xff0c;只需要下载我们整理好的示例代码&#xff0c;并放置在知行之桥指定的工作区中&#xff0c;即可开始使用。 …

Centos下 ffmpeg Unknown encoder ‘libx264‘终极解决方法

目录 背景 原因分析 解决问题 1. 确认提前安装了X264以及相关依赖。

数据结构的三要素

1 三要素之逻辑结构&#xff1a;数据元素之间的逻辑关系 集合&#xff1a;各个元素同属同一集合&#xff0c;别无其他关系&#xff0c;比如全世界500强公司 线性结构&#xff1a;数据元素是一对一的关系&#xff0c;除了第一个元素&#xff0c;其他元素都有唯一前驱&#xff…

设计模式学习之工厂方法模式

设计模式系列往期文章 设计模式学习之策略模式设计模式学习之策略模式在前端的应用设计模式学习之简单工厂模式 在上一篇文章中我们学习了简单工厂模式——这是工厂模式中最简单的一种模式&#xff0c;通过工厂类提供的方法创建类&#xff08;可以类比为产品&#xff09;&…

【区块链 | GameFi】 - 传统游戏进军链游GameFi的探索之路

撰文:W Labs Kluxury,Cplus 【原文链接】 本文要点: 一,什么游戏类型最适合改为链游? 除了链游特有的质押挖矿型和纯 NFT 型,其余的类型都和传统游戏类型高度重合。所以不存在绝对的什么类型可以链改而什么类型不能链改的结论。 开发者立场上看,符合如下几个特性的游…

机器学习之LDA算法

目录 LDA算法 LDA目标 LDA原理推导 LDA除法模型 LDA减法模型 LDA除法正则模型 LDA减法正则模型 证明&#xff1a;StSwSb LDA算法流程 LDA优点 LDA缺点 基于LDA的人脸识别 LDA算法 线性判别分析&#xff08;linear discriminant analysis&#xff0c;LDA&#xff0…

chatgpt赋能python:Python编码转换:理解不同的编码方式

Python编码转换&#xff1a;理解不同的编码方式 Python是一种功能强大的编程语言&#xff0c;它广泛用于各种领域&#xff0c;包括Web开发、数据分析、人工智能等等。与其他编程语言类似&#xff0c;Python也需要进行编码转换以处理不同的字符集和文本编码。 本文将介绍Pytho…

Spark Local环境搭建及测试

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 篇一&#xff1a;Linux系统下配置java环境 篇二&#xff1a;hadoop伪分布式搭建&#xff08;超详细&#xff09; 篇三&#xff1a;hadoop完全分布式集群搭建&#xff08;超详细&#xf…

TypeScript ~ TS 面向对象编程 ⑧

作者 : SYFStrive 博客首页 : HomePage &#x1f4dc;&#xff1a; TypeScript ~ TS &#x1f4cc;&#xff1a;个人社区&#xff08;欢迎大佬们加入&#xff09; &#x1f449;&#xff1a;社区链接&#x1f517; &#x1f4cc;&#xff1a;觉得文章不错可以点点关注 &…

6. Redis缓存设计与性能优化

分布式缓存技术Redis 1. 多级缓存架构2. 缓存设计2.1 缓存穿透2.2 缓存失效(击穿)2.3 缓存雪崩2.4 热点缓存key重建优化2.5 缓存与数据库双写不一致 3. 开发规范与性能优化3.1 键值设计3.1.1 key名设计3.1.2 value设计 3.2 命令使用3.3 三、客户端使用 4. 系统内核参数优化 本文…

3-2 Named tensors

这里有一张图像img_t 彩色图像可以看作一个矩阵&#xff0c;只是矩阵中的每一个点不是一个值&#xff0c;而是包含3个值的数组&#xff0c;这3个值就是RGB值 我们给它随机化为一个形状为 [3, 5, 5] 的三维张量img_t img_t torch.randn(3, 5, 5) # shape [channels, rows, co…

数据库是如何工作的

数据库是如何工作的 注&#xff1a; 本文翻译自db_tutorial. 数据库计算机世界的一个基础软件&#xff0c;要想深入了解数据库&#xff0c;就不得不思考如下几个问题&#xff1a; 数据以什么格式保存&#xff1f;&#xff08;在内存和磁盘上&#xff09;它何时从内存移动到磁…

永磁同步电机的矢量控制PMSM仿真(matlab仿真与图像处理系列第一期)

永磁同步电机(Permanent Magnet Synchronous Motor, PMSM) PMSM具有高效率、高功率密度和快速响应等特点,在现代工业中得到了广泛应用。而矢量控制是一种广泛应用于永磁同步电机的高精度控制方法,它能够实现永磁同步电机的快速、准确、稳定的运行。 矢量控制 矢量控制的…