LeetCode --- 446 周赛

题目列表

3522. 执行指令后的得分
3523. 非递减数组的最大长度
3524. 求出数组的 X 值 I
3525. 求出数组的 X 值 II

一、执行指令后的得分

在这里插入图片描述
照着题目要求进行模拟即可,代码如下

// C++
class Solution {
public:long long calculateScore(vector<string>& instructions, vector<int>& values) {long long ans = 0;int n = values.size();vector<bool> vis(n);for(int i = 0; i >= 0 && i < n;){if(vis[i]) break;vis[i] = true;if(instructions[i][0] == 'a'){ans += values[i++];}else{i = i + values[i];}}return ans;}
};
# Python
class Solution:def calculateScore(self, instructions: List[str], values: List[int]) -> int:n = len(values)i = 0ans = 0vis = [False] * nwhile 0 <= i < n:if vis[i]:breakvis[i] = Trueif instructions[i][0] == 'a':ans += values[i]i += 1else:i += values[i]return ans

二、非递减数组的最大长度

在这里插入图片描述
根据题目的操作方式,我们会得到以下性质:

  • 最大的元素一定会被保留
  • 最大的元素后面的元素一定会被删除
  • 去掉最大元素,我们考虑剩下元素,依旧有上诉的性质
  • 如此循环,直到没有元素可以选择

在上述过程中找最大值的操作需要 O(n) 的时间,会超时,但其实,如果我们逆着看思考过程,就会发现找最大值的操作就是在找前缀最大值,判断一个元素是否能保留,就是看他是否是前缀最大值,代码如下

// C++
class Solution {
public:int maximumPossibleSize(vector<int>& nums) {int ans = 0, mx = 0;for(int x : nums){mx = max(mx, x);if(x == mx)ans++;}return ans;}
};
# Python
class Solution:def maximumPossibleSize(self, nums: List[int]) -> int:mx = 0ans = 0for x in nums:mx = max(mx, x)if x == mx:ans += 1return ans

三、求出数组的 X 值 I

在这里插入图片描述
对于这类子数组问题,我们可以用 53. 最大子数组和 的动态规划想法来思考

  • f [ i ] [ j ] f[i][j] f[i][j] 表示以 i i i 为右端点的乘积除以 k k k 后余数为 j j j 的子数组的个数
  • 如果和以 i − 1 i-1 i1 为右端点的子数组连起来,则 f [ i ] [ ( j ∗ x ) % k ] + f[i][(j*x)\%k]\ + f[i][(jx)%k] + = f [ i − 1 ] [ j ] =f[i-1][j] =f[i1][j],其中 x = n u m s [ i ] 、 j ∈ [ 0 , k ) x=nums[i]、j\in[0,k) x=nums[i]j[0,k)
  • 如果 i i i 单独作为一个子数组,则 f [ i ] [ x % k ] + f[i][x\%k]\ + f[i][x%k] + = 1 =1 =1

代码如下

// C++
class Solution {
public:vector<long long> resultArray(vector<int>& nums, int k) {int n = nums.size();vector f(n + 1, vector<long long>(k));vector<long long> res(k);for(int i = 0; i < n; i++){int x = nums[i] % k;for(int j = 0; j < k; j++){f[i+1][j*x%k] += f[i][j];}f[i+1][x % k]++;for(int j = 0; j < k; j++){res[j] += f[i+1][j];}}return res;}
};// 空间优化
class Solution {
public:vector<long long> resultArray(vector<int>& nums, int k) {int n = nums.size();vector<long long> f(k);vector<long long> res(k);for(int i = 0; i < n; i++){int x = nums[i] % k;vector<long long> tmp(k);for(int j = 0; j < k; j++){tmp[j*x%k] += f[j];}tmp[x % k]++;f = tmp;for(int j = 0; j < k; j++){res[j] += f[j];}}return res;}
};
# Python
class Solution:def resultArray(self, nums: List[int], k: int) -> List[int]:res = [0] * kf = [0] * kfor num in nums:m = num % ktmp = [0] * ktmp[m] += 1for x in range(k): tmp[(x * m) % k] += f[x]f = tmpfor x in range(k):res[x] += f[x]return res

四、求出数组的 X 值 II

在这里插入图片描述
(注意:本题的题面和上一题不一样,请仔细阅读)

通过题目,我们不难看出查询的几个经典特征:单点修改+区间查询,很容易想到用 线段树 来维护,关键是如何进行维护,或者说线段树的结点应该保留哪些值?

  • mul表示整个区间的乘积 %k 后的值,为了方便后面计算

  • array<int,5>resres[i] 表示 [l,r]中以 l 为左端点的元素乘积 %k = i 的子数组个数,这里直接开 5int 是因为 k 最大为 5

  • 合并区间时

    • cur.mul = left.mul * right.mul % k
    • cur.res = left.res && cur.res[left.mul * i % k] += right.res[i],因为都要以 l 为左端点
// C++
struct Node{long long mul;array<int, 5> res;
};
class SegTree{    
public:SegTree(int n, int K):t(n << 2), k(K){}void maintain(int o){t[o].mul = (t[o<<1].mul * t[o<<1|1].mul) % k;t[o].res = t[o<<1].res;for(int i = 0; i < k; i++){t[o].res[t[o<<1].mul * i % k] += t[o<<1|1].res[i];}}void build(int o, int l, int r, const vector<int> & a){if(l == r){t[o].mul = a[l] % k;t[o].res[a[l] % k] = 1;return;}int mid = l + (r - l) / 2;build(o << 1, l, mid, a);build(o << 1 | 1, mid + 1, r, a);maintain(o);}void update(int o, int l, int r, int i, int val){if(l == r){t[o].mul = val % k;for(int i = 0; i < k; i++)t[o].res[i] = 0;t[o].res[val % k] = 1;return;}int mid = l + (r - l) / 2;if(i <= mid) update(o << 1, l, mid, i, val);else update(o << 1 | 1, mid + 1, r, i, val);maintain(o);}Node query(int o, int l, int r, int L, int R){if(L <= l && r <= R){return t[o];}int mid = l + (r - l) / 2;if(L <= mid){auto left = query(o << 1, l, mid, L, R);if(mid < R){auto right = query(o << 1 | 1, mid + 1, r, L, R);Node ret;ret.mul = left.mul * right.mul % k;ret.res = left.res;for(int i = 0; i < k; i++){ret.res[left.mul*i % k] += right.res[i];}return ret;}return left;}return query(o << 1 | 1, mid + 1, r, L, R);}
private:vector<Node> t;int k;
};
class Solution {
public:vector<int> resultArray(vector<int>& nums, int k, vector<vector<int>>& queries) {int n = nums.size();SegTree t(n, k);t.build(1, 0, n - 1, nums);vector<int> res;for(auto& q : queries){t.update(1, 0, n - 1, q[0], q[1]);res.push_back(t.query(1, 0, n - 1, q[2], n - 1).res[q[3]]);}return res;}
};

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

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

相关文章

山东大学软件学院项目实训-基于大模型的模拟面试系统-前端美化滚动条问题

模拟面试界面左侧底部 通过检查工具定位到其所在的位置&#xff1a; 直接对该组件进行美化&#xff1a; <!-- AI面试官列表 --><div class"ai-interviewer-section" v-show"activeTab interviewer"><el-scrollbar class"no-horizont…

git版本回退 | 远程仓库的回退 (附实战Demo)

目录 前言1. 基本知识2. Demo3. 彩蛋 前言 &#x1f91f; 找工作&#xff0c;来万码优才&#xff1a;&#x1f449; #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器&#xff0c;无代码爬取&#xff0c;就来&#xff1a;bright.cn 本身暂存区有多个文件&#xff0c;但手快了&…

什么事Nginx,及使用Nginx部署vue项目(非服务器Nginx压缩包版)

什么是 Nginx? Nginx(发音为 “engine-x”)是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。它以其高性能、高并发处理能力和低资源消耗而闻名。以下是 Nginx 的主要特性和用途: 主要特性 高性能和高并发 Nginx 能够处理大量并发连接,适合高…

第十六周蓝桥杯2025网络安全赛道

因为只会web&#xff0c;其他方向都没碰过&#xff0c;所以只出了4道 做出来的&#xff1a; ezEvtx 找到一个被移动的文件&#xff0c;疑似被入侵 提交flag{confidential.docx}成功解出 flag{confidential.docx} Flowzip 过滤器搜索flag找到flag flag{c6db63e6-6459-4e75-…

高性能的开源网络入侵检测和防御引擎:Suricata介绍

一、Debian下使用Suricata 相较于Windows&#xff0c;Linux环境对Suricata的支持更加完善&#xff0c;操作也更为便捷。 1. 安装 Suricata 在Debian系统上&#xff0c;你可以通过包管理器 apt 轻松安装 Suricata。 更新软件包列表: sudo apt update安装 Suricata: sudo apt …

IP-address-space

导航 (返回顶部) 1. IPv4地址分配表 1.2 IPv4 专用地址注册表1.3 各国IPv4地址分配列表 2. IPv6地址分配表 2.1 IANA IPv6 专用地址注册表2.2 IPv6 多播地址分配 1. IPv4地址分配表1.2 IPv4 专用地址注册表1.3 各国IPv4地址分配列表 2. IPv6地址分配表2.1 IANA IPv6 专用地址…

Ubuntu使用war包部署Jenkins并通过systemcl管理

目录 一、当前系统环境 二、安装Java 二、安装Jenkins 三、使用systemctl管理 一、当前系统环境 操作系统&#xff1a;ubuntu 24.04 Jenkins版本&#xff1a;2.506 格式&#xff1a;war JDK版本&#xff1a;OpenJDK_17 二、安装Java 1.下载jdk安装包 # wget下载 wget …

牛客 verilog入门 VIP

1、输出1 答案&#xff1a; timescale 1ns/1nsmodule top_module(output wire one );assign one 1b1; endmodule 2、wire连线 答案&#xff1a; timescale 1ns/1nsmodule wire0(input wire in0,output wire out1 );assign out1 in0; endmodule 3、多wire连线 timescale 1…

简易版2D我的世界C++程序(有点BUG,但是可以玩!!!)

1、按空格键来切换模式&#xff08;挖掘模式和放置模式&#xff09;&#xff0c;一律用鼠标右键来操作&#xff01;&#xff01;&#xff01; 2、按数字1和2键来切换放置的方块&#xff08;1是草&#xff0c;2是木&#xff09;&#xff0c;树叶不能放置&#xff01;&#xff01…

ubuntu使用dify源码安装部署教程+避坑指南

很多人,包括我在最初使用dify的时候都习惯使用docker来部署安装环境,但在二次开发使用过程中,我们可能希望使用源码来安装,那么这篇文章我将给大家分享如何在ubuntu系统下使用源码安装,并提供大家遇到的疑难杂症如下: dify安装使用过程中报错:/console/api/workspaces/…

java知识体系结构导航

很全&#xff1a;java知识体系结构 个人笔记链接 开发工具IDEA IDEA 插件推荐清单 IDEA快捷键大全 Java基础难点 基础知识_java动态代理 基础知识_java反射机制 基础知识-java流steam 基础知识-java集合collection Spring 01.Spring 框架的演化&#xff1a;从 XML 配置到…

RabbitMQ 的专业术语

术语定义示例/说明生产者&#xff08;Producer&#xff09;发送消息到 RabbitMQ 的客户端应用程序。日志系统将错误信息发送到 RabbitMQ。消费者&#xff08;Consumer&#xff09;从 RabbitMQ 队列中接收并处理消息的客户端应用程序。一个订单处理服务从队列中读取消息并更新数…

mac安装vm虚拟机安装包

因为mac安装虚拟机时&#xff0c;发现下载过程变得不太一样&#xff0c;会比较麻烦。所以决定发一下我已经下载的安装包&#xff0c;个人用户使用免费&#xff0c;商业版请自行去官网下载&#xff01; 百度网盘下载链接 百度网盘 请输入提取码 提取码:d4rc

LLama Factory从入门到放弃

目录 简介 安装 LLama Factory界面介绍 数据格式要求 微调训练 今天在这里介绍一种常用的大模型微调框架——LLama Factory。 简介 LLama Factory 是一个高效的界面化大语言模型微调工具库&#xff0c;支持多种参数高效微调技术&#xff0c;提供简洁接口和丰富示例&#…

如何借助全球动态IP实现多平台账号的批量注册?

无论是社交网络、在线购物平台还是专业应用软件&#xff0c;账号的创建和使用都是必不可少的。然而&#xff0c;在面对不同平台各自的注册限制和策略时&#xff0c;如何高效、安全且合法地进行账号批量注册成为了亟待解决的问题。本文将探讨全球动态IP在这一过程中的作用及其如…

django admin 添加自定义页面

在Django中&#xff0c;你可以通过多种方式向Django Admin添加自定义页面。以下是一些常见的方法&#xff1a; 方法1&#xff1a;使用ModelAdmin的get_urls()方法 如果你只是想添加一个简单的页面来展示信息&#xff0c;你可以在你的ModelAdmin类中重写get_urls()方法。 from…

Docker容器持久化

引言 Docker 容器作为一种轻量级、可移植的虚拟化技术&#xff0c;广泛应用于开发、测试和生产环境中。然而&#xff0c;容器天生是短暂的&#xff0c;意味着它们在生命周期结束后会被销毁&#xff0c;而其中的数据也会随之丢失。为了确保容器中的数据能够持久化&#xff0c;我…

ShaderToy学习笔记 02.圆

1. 画圆 1.1. 圆的方程 圆的方程是&#xff1a;(x^2 y^2 r^2)&#xff0c;其中(r)是圆的半径。 我们可以使用 desmos 来验证一下。 输入 x^2 y^2 -10&#xff0c;即可得到圆。 类似下图 1.2. 画圆的方式 画圆&#xff1a;使用圆的方程&#xff0c;判断每个像素点是否在圆…

一文详解卷积神经网络中的卷积层和池化层原理 !!

文章目录 前言 一、卷积核大小&#xff08;Kernel Size&#xff09; 1. 卷积核大小的作用 2. 常见的卷积核大小 3. 选择卷积核大小的原则 二、步长&#xff08;Stride&#xff09; 1. Stride的作用 三、填充&#xff08;Padding&#xff09; 1. 填充的作用 四、通道数&#xff…

云+AI双轮驱动,亚马逊云科技加速中国企业出海新浪潮

导读&#xff1a;全球化就是本地化 作者 | 小葳 图片来源 | 摄图 近年来&#xff0c;中国企业出海步伐不断加快&#xff0c;“不出海&#xff0c;就出局”成为很多企业的共识。 据沙利文统计&#xff0c;2024年上半年&#xff0c;超过2000家中国上市企业布局海外市场&#xff…