LeetCode 第421场周赛个人题解

目录

3334. 数组的最大因子得分

原题链接

思路分析

AC代码

3335. 字符串转换后的长度 I

原题链接

思路分析

AC代码

3336. 最大公约数相等的子序列数量

原题链接

思路分析

AC代码

3337. 字符串转换后的长度 II

原题链接

思路分析

AC代码


3334. 数组的最大因子得分

原题链接

3334. 数组的最大因子得分

思路分析

直接模拟

时间复杂度:O(N^2 logN)

AC代码

class Solution:def maxScore(self, nums: List[int]) -> int:if len(nums) == 1: return nums[0] ** 2res = 0for i in range(len(nums) + 1):g = 0l = -1for j in range(len(nums)):if i == j: continueg = gcd(g, nums[j])if l == -1:l = nums[j]else:l = l * nums[j] // gcd(l, nums[j])res = max(res, g * l)return res

3335. 字符串转换后的长度 I

原题链接

3335. 字符串转换后的长度 I

思路分析

状态机dp

dfs(c, t) 为 一个字符c 在 t次转换后的长度

那么 设x 为变成 ab 所需次数

如果 t < x,那么返回1

否则返回  dfs('a', t - x) + dfs('b', t - x) 

时间复杂度:O(U t), U 为字符集大小

AC代码

P = 10**9+7
@cache
def dfs(c: chr, t: int) -> int:x = ord('z') - ord(c) + 1if t < x: return 1return (dfs('a', t - x) + dfs('b', t - x)) % P
class Solution:def lengthAfterTransformations(self, s: str, t: int) -> int:cnt = Counter(s)res = 0for ch, c in cnt.items():res += dfs(ch, t) * c % Pif res >= P:res -= Preturn res

3336. 最大公约数相等的子序列数量

原题链接

3336. 最大公约数相等的子序列数量

思路分析

线性dp

定义 f(i, j, k) 为 前 i 个数能够拆出的 <seq1, seq2> 的对数,其中gcd(seq1) = j, gcd(seq2) = k

那么 对于nums[i],可以加入seq1也可以加入seq2,也可以不加

可以得到三个递推式子 

f(i + 1, gcd(j, nums[i], k) += f(i, j, k)

f(i + 1, j, gcd(nums[i], k)) += f(i, j, k)

f(i + 1, j, k) += f(i, j, k)

时间复杂度:O(N M^2 + M^M logM)

AC代码

constexpr int P = 1e9 + 7;
constexpr int N = 201;
int f[2][N][N], g[N][N];
auto INIT = [](){for (int i = 0; i < N; ++ i)for (int j = 0; j < N; ++ j) {g[i][j] = gcd(i, j);}return 0;
}();class Solution {
public:int subsequencePairCount(vector<int>& nums) {int n = nums.size();int M = *max_element(nums.begin(), nums.end());memset(f, 0, sizeof f);f[0][0][0] = 1;for (int i = 0; i < n; ++i) {int v = nums[i];memset(f[(i + 1) & 1], 0, sizeof f[(i + 1) & 1]);for (int x = 0; x <= M; ++x) {for (int y = 0; y <= M; ++y) {f[(i + 1) & 1][g[x][v]][y] = (f[(i + 1) & 1][g[x][v]][y] + f[i & 1][x][y]) % P;f[(i + 1) & 1][x][g[y][v]] = (f[(i + 1) & 1][x][g[y][v]] + f[i & 1][x][y]) % P;f[(i + 1) & 1][x][y] = (f[(i + 1) & 1][x][y] + f[i & 1][x][y]) % P;}}}int res = 0;for (int x = 1; x <= M; ++x) {res = (res + f[n & 1][x][x]) % P;}return res;}
};

3337. 字符串转换后的长度 II

原题链接

3337. 字符串转换后的长度 II

思路分析

矩阵快速幂优化状态机dp

很板的矩阵快速幂优化状态机dp

我们根据 nums[] 去填转移矩阵就行了,没什么说的

如果不会矩阵快速幂优化状态机dp:矩阵快速幂及应用实战[C/C++]_c++矩阵快速幂-CSDN博客

时间复杂度:(26^3) * log(t)

AC代码

constexpr int P = 1E9 + 7;
using i64 = long long;
struct Matrix {int m, n;std::vector<std::vector<int>> g;Matrix(int _m, int _n) : m(_m), n(_n), g(_m, std::vector<int>(_n)){}Matrix(const std::vector<std::vector<int>> &_init) : m(_init.size()), n(_init[0].size()), g(_init) {}Matrix(const Matrix &a) : Matrix(a.g) {}void init() {assert(m == n); for (int i = 0; i < m; ++ i)g[i].assign(m, 0), g[i][i] = 1;}const std::vector<int>& operator [] (int i) const {assert(i < m);return g[i];}void show() const {for (int i = 0; i < m; ++ i)for (int j = 0; j < n; ++ j) std::cout << g[i][j] << " \n"[j + 1 == n]; std::cout << '\n';}friend inline Matrix operator * (const Matrix &a, const Matrix &b) {int m = a.m, n = b.n, t = a.n;Matrix res(m, n);for (int i = 0; i < m; ++ i)for (int k = 0; k < t; ++ k)for (int j = 0; j < n; ++ j) res.g[i][j] = (res.g[i][j] + 1LL * a[i][k] * b[k][j] % P) % P;return res;}friend inline Matrix power(Matrix a, i64 b) {Matrix res(a.m, a.m);res.init(); for (; b; b >>= 1, a = a * a) if (b & 1)res = res * a;return res;}
};class Solution {
public:int lengthAfterTransformations(string s, int t, vector<int>& nums) {/*f[t][c] = f[t - 1][] + f[][] + f[][]...*/std::vector<std::vector<int>> help(26, std::vector<int>(26));for (int i = 0; i < 26; ++ i) {for (int j = 1; j <= nums[i]; ++ j) {int nxt = (i + j) % 26;help[nxt][i] = 1;}}Matrix h(help);std::vector<std::vector<int>> cnt(26, std::vector<int>(1));for (char ch : s) {++ cnt[ch - 'a'][0];}Matrix c(cnt);auto g = power(h, t) * c;int res = 0;for (int i = 0; i < 26; ++ i) {res += g[i][0];if (res >= P) {res -= P;}}return res;}
};

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

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

相关文章

逆向工程基本概念

引言 逆向工程&#xff08;Reverse Engineering&#xff09;是指从已经存在的产品或系统中提取信息&#xff0c;并理解其设计原理的过程。在软件开发中&#xff0c;逆向工程通常用于理解一个已有软件系统的内部工作原理&#xff0c;可能是为了兼容性、安全分析、修复或者改进等…

Pyhton自动化测试持续集成和Jenkins

持续集成 官方术语&#xff1a; 持续集成&#xff08;Continuous Integration&#xff09;&#xff0c;也就是我们经常说的 CI 持续集成&#xff08;CI&#xff09;是一种实践&#xff0c;可以让团队在持续的基础上收到反馈并进行改进&#xff0c;不必等到开发周期后期才寻找…

二十四、Python基础语法(变量进阶)

一、引用 在定义变量的时候, 解释器会给变量和数据分别在内存中分配内存&#xff0c;变量中保存的是数据的地址, 称为引用&#xff0c;Python 中数据的传递,传递的都是引用&#xff0c;可以使用 id(变量) 函数,获取变量中引用地址。 # 将数字1在内存中的地址储存到变量a中 a …

人工智能岗位英语面试 - 如何确保模型的可靠性和性能

确保模型的可靠性和性能 1. Precision Precision is a metric that measures how accurate the model’s positive predictions are. It calculates the ratio of true positives (correctly predicted positive cases) to the total number of predicted positives (both tr…

时间比较日期

现在需要一个获取当前时间然后对比一个月后的时间的java方法&#xff0c;比如&#xff1a;当前时间获取到是2024-10-28&#xff0c;然后我写定一个时间2024-10-29&#xff0c;这两个比大小&#xff0c;获取的当前时间要小于我写定的时间返回true否则返回false import java.time…

从头学PHP之数组输出基本函数

上期我们讲到了数组&#xff0c;数组是个特殊的变量&#xff0c;在程序中的重要程度很高&#xff0c;大部分数据处理的时候会用到这种特殊的变量&#xff0c;那么现在让我们继续深入一下吧。 上期我们打印出了数组的值&#xff0c;用print_r()或者var_dump()这俩函数&#xff0…

paddleocr使用FastDeploy 部署工具部署 rknn 模型

在 PC 端转换 pdmodel 模型为 rknn 模型和在板端使用百度飞浆开发的 FastDeploy 部署工具部署 rknn 模型 以下内容是在 PC 端系统为 Ubuntu20.04&#xff0c;板端系统为ubuntu20.04 的环境下实现的 描述&#xff1a; 官网地址 rknn_zoo RKNPU2_SDK …

【Linux】进程调度 | 进程切换上下文数据

&#x1fa90;&#x1fa90;&#x1fa90;欢迎来到程序员餐厅&#x1f4ab;&#x1f4ab;&#x1f4ab; 主厨&#xff1a;邪王真眼 主厨的主页&#xff1a;Chef‘s blog 所属专栏&#xff1a;青果大战linux 总有光环在陨落&#xff0c;总有新星在闪烁 小感慨&#xff1a; …

区块链系统控制台Console的安装与运维

【要求】 登陆Linux 服务器&#xff0c;安装、部署区块链系统控制台 Console&#xff0c;并完成节点的运维。同 时&#xff0c;检查控制台是否能够正常运行。 【任务】 1. 登陆 linux 服务器&#xff0c;进入指定操作目录按下列要求完成控制的安装与部 署&#xff0c;并将安装过…

Rust语言的优缺点以及学习建议

在编程世界的不断演变中&#xff0c;Rust 作为一种重要的语言脱颖而出。它以安全性和性能为核心&#xff0c;正在获得开发者们的广泛关注。但究竟什么是 Rust&#xff1f;它为何如此受欢迎&#xff1f;在这篇博客中&#xff0c;我们将深入探讨 Rust 的世界&#xff0c;探索它的…

【三十七】【QT开发应用】使用QVideoWidget播放视频,QT模块缺失时更新安装模块步骤(利用虚拟网址打开应用加速)

效果展示 下面有一个按钮打开视频&#xff0c;点击按钮之后会出现一个弹窗选择文件&#xff0c;默认打开的是D盘&#xff0c;并且选择的文件的类型有.mp4 .flv或者所有文件。选择正确的视频文件之后可以正常播放视频。 widget.h 主窗口头文件 #pragma once#include <QtWid…

【设计模式系列】适配器模式(九)

目录 一、什么是适配器模式 二、适配器模式的角色 三、适配器模式的典型应用 四、适配器模式在InputStreamReader中的应用 一、什么是适配器模式 适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许将不兼容的接口转换为一个客户端…

【Vue】word / excel / ppt / pdf / 视频(mp4,mov) 预览

文件预览 Vue3一. word二. excel三. ppt四. pdf4.1 vue-pdf-embed4.2 iframe 五. 视频六&#xff1a;扩展——kkFileView Vue3 一. word 安装&#xff1a;npm install docx-preview父页面 <template><div><DocPreviewv-if"filePath.includes(docx)"…

Cisco Packet Tracer 8.0 路由器单臂路由配置

文章目录 单臂路由简介一、单臂路由的原理二、单臂路由的配置步骤三、单臂路由的优缺点四、应用场景 一&#xff0c;拓扑图搭建二&#xff0c;pc IP地址配置三&#xff0c;交换机Switch0配置四&#xff0c;配置路由器Router0五&#xff0c;测试 单臂路由简介 单臂路由&#xf…

Hadoop-001-本地虚拟机环境搭建

一、安装VMware 官方下载VMware&#xff1a; https://vmware.mdsoft.top/?bd_vid5754305114651491003 二、下载镜像文件 阿里云镜像仓库&#xff1a; https://mirrors.aliyun.com/centos/ 本文档使用 CentOS-7-x86_64-DVD-1810-7.6.iso 搭建虚拟机 三、搭建虚拟机 1、编辑…

【WRF数据准备】基于GEE下载静态地理数据-叶面积指数LAI及绿色植被率Fpar

【WRF数据准备】基于GEE下载静态地理数据 准备:WRF所需静态地理数据(Static geographical data)数据范围说明基于GEE下载叶面积指数及绿色植被率GEE数据集介绍数据下载:LAI(叶面积指数)和Fpar(绿色植被率)数据处理:基于Python处理为单波段LAI数据参考GEE的介绍可参见另…

VantUI

官网&#xff1a;Vant 4 - A lightweight, customizable Vue UI library for mobile web apps. Vant组件库&#xff1a; 基础组件 按钮、图标、布局、提示信息等 表单组件 日历、复选框、时间选择、输入框、评分等 反馈组件 弹出框、加载、下拉菜单、消息提示、下拉刷新、滚动…

面试阿里、字节全都一面挂,被面试官说我的水平还不如应届生

测试员可以先在大厂镀金&#xff0c;以后去中小厂毫无压力&#xff0c;基本不会被卡&#xff0c;事实果真如此吗&#xff1f;但是在我身上却是给了我很大一巴掌... 所谓大厂镀金只是不卡简历而已&#xff0c;如果面试答得稀烂&#xff0c;人家根本不会要你。况且要不是大厂出来…

C#入坑JAVA MyBatis入门 CURD 批量 联表分页查询

本文&#xff0c;分享 MyBatis 各种常用操作&#xff0c;不限于链表查询、分页查询等等。 1. 分页查询 在 下文的 的「3.4 selectPage」小节&#xff0c;我们使用 MyBatis Plus 实现了分页查询。除了这种方式&#xff0c;我们也可以使用 XML 实现分页查询。 这里&#xff0c…

1-petalinux2018.3 摸索记录 -petalinux-config

一、petalinux-config的具体配置-ZYNQMP Configuration 1、Linux Compoment Selection Linux Compoment Selection&#xff0c;Linux组件选择. First Stage Bootloader和Auto update ps_init勾选会自动生成fsbl.elf&#xff0c;自动更新ps_init。 PMU Firmware平台管理单元固…