力扣 第 463 场周赛

1. 按策略买卖股票的最佳时机

给你两个整数数组 prices 和 strategy,其中:

prices[i] 表示第 i 天某股票的价格。
strategy[i] 表示第 i 天的交易策略,其中:
-1 表示买入一单位股票。
0 表示持有股票。
1 表示卖出一单位股票。
同时给你一个 偶数 整数 k,你可以对 strategy 进行 最多一次 修改。一次修改包括:

选择 strategy 中恰好 k 个 连续 元素。
将前 k / 2 个元素设为 0(持有)。
将后 k / 2 个元素设为 1(卖出)。
利润 定义为所有天数中 strategy[i] * prices[i] 的 总和 。

返回你可以获得的 最大 可能利润。

注意: 没有预算或股票持有数量的限制,因此所有买入和卖出操作均可行,无需考虑过去的操作。

解题思路:容易想到滑窗的思路, 通过计算增量, 结果就是原来的乘积+增量, 先计算第一个窗口, 对于数组strategy, 前k/2个数变成0, 增量为-strategy[I]*prices[i],  后k/2变成1, 增量为prices[i]*1-strategy[I]*prices[i], 向右滑动的过程中, 下标为i-k/2的数会从1变成0, 若变化后增量全是负值, 此时保持原值更优, 也就是增量和0取最大值

using ll = long long;
class Solution {
public:long long maxProfit(vector<int>& prices, vector<int>& strategy, int k) {ll tot = 0, sum = 0;for (int i = 0; i < k / 2; i++) {int p = prices[i], s = strategy[i];tot += p * s;sum -= p * s;}for (int i = k / 2; i < k; i++) {int p = prices[i], s = strategy[i];tot += p * s;sum += p * (1 - s);}ll max_sum = max(sum, 0LL);for (int i = k; i < prices.size(); i++) {int p = prices[i], s = strategy[i];tot += p * s;sum += p * (1 - s) - prices[i - k / 2] +prices[i - k] * strategy[i - k];max_sum = max(max_sum, sum);}return max_sum + tot;}
};
// [i,i+k/2-1]/[i-k,i-k/2-1] - 前k/2
// [i-k/2,i-1]

 2. 区间乘法查询后的异或 I

给你一个长度为 n 的整数数组 nums 和一个大小为 q 的二维整数数组 queries,其中 queries[i] = [li, ri, ki, vi]。

对于每个查询,按以下步骤执行操作:

设定 idx = li。
当 idx <= ri 时:
更新:nums[idx] = (nums[idx] * vi) % (109 + 7)
将 idx += ki。
在处理完所有查询后,返回数组 nums 中所有元素的 按位异或 结果。

解题思路:

0 <= li <= ri < n
1 <= q == queries.length <= 10^3

n*q的时间复杂度, 直接按题意模拟即可

const int MOD = 1e9 + 7;
using ll = long long;
class Solution {
public:int xorAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {vector<ll> nums_;for (int i = 0; i < nums.size(); i++)nums_.push_back(nums[i]);for (int i = 0; i < queries.size(); i++) {int x = queries[i][0], y = queries[i][1], z = queries[i][2],e = queries[i][3];for (int j = x; j <= y; j += z) {nums_[j] = (nums_[j] * e) % MOD;}}ll ans = 0;for (int i = 0; i < nums_.size(); i++) {ans = ans ^ nums_[i];}return ans;}
};

3. 删除可整除和后的最小数组和

给你一个整数数组 nums 和一个整数 k。

你可以 多次 选择 连续 子数组 nums,其元素和可以被 k 整除,并将其删除;每次删除后,剩余元素会填补空缺。
返回在执行任意次数此类删除操作后,nums 的最小可能 和。

解题思路:DP,每次删除的元素和都是k的倍数, 对于数组的最后一个元素nums[n-1], 删除的话, 寻找当前待删子数组的左端点i, 下标i...n-1是k的倍数, 删除子数组 [i,n−1] 后,问题变成前缀 [0,i−1] 的最小和, 可能有多个满足条件的左端点i, 题中求删除后nums的最小可能和, 因此删除和最大的子数组和, 保留剩下最小的数组和。状态转移时, 不删就是f+x, 删的话, 变为剩余前缀的最小值

using ll = long long;
class Solution {
public:long long minArraySum(vector<int>& nums, int k) {vector<ll> a(k, LLONG_MAX);a[0] = 0;ll f = 0;int s = 0;for (int i = 0; i < nums.size(); i++) {s = (s + nums[i]) % k;f = min(f + nums[i], a[s]);a[s] = f;}return f;}
};

4. 区间乘法查询后的异或 II

给你一个长度为 n 的整数数组 nums 和一个大小为 q 的二维整数数组 queries,其中 queries[i] = [li, ri, ki, vi]。
对于每个查询,需要按以下步骤依次执行操作:

设定 idx = li。
当 idx <= ri 时:
更新:nums[idx] = (nums[idx] * vi) % (109 + 7)。
将 idx += ki。
在处理完所有查询后,返回数组 nums 中所有元素的 按位异或 结果。

解题思路:大数据范围 - 不会写 - 转载佬的

如果 ki​>n​,我们直接暴力计算,因为下标每次增加 n​,最多加 n​ 次就到 n 了。维护这种操作的复杂度是 O(qn​)。

如果 ki​≤n​,注意到本次操作被修改的下标 modki​ 都和 li​modki​ 相等,又因为只要求最后的答案,所以我们可以把这个信息先分类记下来:步长为 ki​,且下标 modki​ 为特定值,且位于区间 [li​,ri​] 里的所有下标都要乘以 vi​。步长只有 n​ 种,每种步长的 mod 也只有 n​ 种,因此我们只有 O(n) 类信息要记录。

怎么把我们记录的信息还原成答案呢?我们枚举每类信息,这样问题变为:每次给一个区间乘以 vi​,问每个数最后的值。这就是 leetcode 1109. 航班预定统计,对操作区间排序,使用差分 + 扫描线的思想即可离线处理。1109 题里,加法的逆运算是减法,本题里模意义下乘法的逆运算是求逆元。

还原答案的复杂度是多少呢?注意到相同步长不同余数的下标是不会重复的,因此每种步长会恰好把所有下标枚举一遍,因此我们会枚举 O(nn​) 次下标,再加上对操作的排序,因此复杂度为 O(qlogq+nn​)。

最后考虑求逆元的复杂度,整体复杂度为 O(q(logq+logM)+nn​),其中 M=109+7 是模数。

class Solution {
public:int xorAfterQueries(vector<int>& nums, vector<vector<int>>& queries) {int n = nums.size(), B = sqrt(n);// 求乘法逆元const int MOD = 1e9 + 7;auto inv = [&](long long a) {long long b = MOD - 2, y = 1;for (; b; b >>= 1) {if (b & 1) y = (y * a) % MOD;a = a * a % MOD;}return y;};long long A[n];for (int i = 0; i < n; i++) A[i] = nums[i];typedef pair<int, long long> pil;vector<pil> vec[B + 1][B + 1];for (auto &qry : queries) {int l = qry[0], r = qry[1], K = qry[2], v = qry[3];if (K <= B) {// 步长不超过根号,先把操作记下来// 差分思想:记录操作开始的位置以及原运算,再记录操作结束的位置以及逆运算vec[K][l % K].push_back({l, v});vec[K][l % K].push_back({r + 1, inv(v)});} else {// 步长超过根号,暴力处理for (int i = l; i <= r; i += K) A[i] = A[i] * v % MOD;}}// 枚举每一类操作for (int k = 1; k <= B; k++) for (int m = 0; m < k; m++) {// 把操作按下标从左到右排序sort(vec[k][m].begin(), vec[k][m].end());// 扫描线维护当前乘积long long now = 1;// 枚举这一类里的所有下标for (int i = m, j = 0; i < n; i += k) {// 用扫描线进行需要的操作while (j < vec[k][m].size() && vec[k][m][j].first <= i) {now = now * vec[k][m][j].second % MOD;j++;}A[i] = A[i] * now % MOD;}}long long ans = 0;for (int i = 0; i < n; i++) ans ^= A[i];return ans;}
};

感谢大家的点赞和关注,你们的支持是我创作的动力!

 

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

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

相关文章

Matplotlib 可视化大师系列(六):plt.imshow() - 绘制矩阵与图像的强大工具

目录Matplotlib 可视化大师系列博客总览Matplotlib 可视化大师系列&#xff08;六&#xff09;&#xff1a;plt.imshow() - 绘制矩阵与图像的强大工具一、 plt.imshow() 是什么&#xff1f;何时使用&#xff1f;二、 函数原型与核心参数三、 从入门到精通&#xff1a;代码示例示…

小游戏AssetBundle加密方案解析

据游戏工委数据统计&#xff0c;2025年1-6月&#xff0c;国内小程序游戏市场实际销售收入232.76亿元&#xff0c;同比增长40.2%。其中内购产生收入153.03亿元&#xff0c;占比65.7%&#xff0c;呈逐年提升趋势。爆款频出的小游戏&#xff0c;已经成为当下游戏行业的重要增长点。…

linux编程----网络通信(TCP)

1.TCP特点1.面向数据流&#xff1b;2.有连接通信&#xff1b;3.安全可靠的通信方式&#xff1b;4.机制复杂&#xff0c;网络资源开销大&#xff1b;5.本质只能实现一对一的通信&#xff08;可使用TCP的并发方式实现一对多通信&#xff09;&#xff1b;2.TCP的三次握手与四次挥手…

HTTP请求的执行流程

HTTP请求的执行流程是一个系统化的过程&#xff0c;涉及多个网络协议和交互步骤。以下是完整的流程分解&#xff0c;结合关键技术和逻辑顺序&#xff1a;&#x1f310; 一、连接准备阶段​​URL解析与初始化​​客户端&#xff08;浏览器/应用&#xff09;解析目标URL&#xff…

联想win11笔记本音频失效,显示差号(x)

该博客可以解答 常见问题详情 Win10系统安装更新后右下角声音出现红叉&#xff0c;电脑也没有声音&#xff0c; 通过设备管理器查看“系统设备”发现“音频部分“出现黄色感叹号&#xff0c; 更新驱动、卸载驱动与第三方工具检测安装后重启都不行。 故障原因 应该是用户曾经…

elasticsearch 7.x elasticsearch 使用scroll滚动查询中超时问题案例

一 问题 1.1 问题描述 2025-08-21 16:57:53.646 | WARN ||||||||||||| scheduling-1 | ElasticsearchRestTemplate | Could not clear scroll: Unable to parse response body; nested exception is ElasticsearchStatusException [Unable to parse response body]; nested: …

高并发内存池(1)-定长内存池

高并发内存池&#xff08;1&#xff09;-定长内存池 可以采用两种方式&#xff1a; 方式1&#xff1a; template <size_t N>方式2&#xff1a; template <class T>获取到T对象大小的内存池&#xff0c;更推荐使用方式二&#xff0c;因为可以动态灵活调整类型 需要的…

第三阶段sql server数据-4:数据库脚本生成,备份与还原,分离与附加操作的图文步骤

1_生成数据库脚本&#xff08;1&#xff09;在数据库上右键选择任务&#xff08;2&#xff09;选择生成脚本&#xff08;3&#xff09;选择下一步&#xff0c;如果下次不想显示此页面&#xff0c;可勾选不再显示此页&#xff08;4&#xff09;如果导出全部数据&#xff0c;选择…

【C++闯关笔记】STL:string的学习和使用(万字精讲)

​系列文章目录 第零篇&#xff1a;从C到C入门&#xff1a;C有而C语言没有的基础知识总结-CSDN博客 第一篇&#xff1a;【C闯关笔记】封装①&#xff1a;类与对象-CSDN博客 第二篇&#xff1a;【C闯关笔记】封装②&#xff1a;友元与模板-CSDN博客 第三篇&#xff1a;【C闯…

06 - spring security角色和权限设置

spring security角色和权限设置 文档 00 - spring security框架使用01 - spring security自定义登录页面02 - spring security基于配置文件及内存的账号密码03 - spring security自定义登出页面04 - spring security关闭csrf攻击防御05 - spring security权限控制 角色和权限…

如何实现文档处理全流程自动化?

在处理文本文档、电子邮件、视频音频、社媒帖子等非结构化数据时&#xff0c;我们经常发现这些数据难以用传统的数据库表格进行存储和管理&#xff0c;因为其没有明确的结构和标准化的格式&#xff0c;因此&#xff0c;这类数据处理难度较大&#xff0c;当传统“人眼Excel”模式…

Java Main无法初始化主类的原因与解决方法(VsCode工具)

个人操作 由于上传git将target目录也上传了所以在本地删除target之后再重新同步更新动作然后直接在vscode工具上run本地项目运行报错&#xff0c;报错信息如下 报错信息分析原因1. 工具配置 用 VS Code 的“Run”运行按钮时&#xff0c;是否会自动编译&#xff0c;取决于你的 V…

Azure Kubernetes Service (AKS)

Overview AKS&#xff08;Azure Kubernetes Service&#xff09; 是 Microsoft Azure 提供的一种托管Kubernetes 服务&#xff0c;旨在简化 Kubernetes 集群的部署、管理和操作。轻松运行和扩展基于容器的应用程序&#xff0c;而无需管理 Kubernetes 本身的基础设施。 AKS与 …

基于SpringBoot的校园信息共享系统【2026最新】

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

PyTorch API 3 - distributed

文章目录分布式通信包 - torch.distributed后端支持PyTorch 内置的后端选择哪个后端&#xff1f;常见环境变量选择使用的网络接口其他NCCL环境变量基础概念初始化返回类型&#xff1a;boolTCP初始化共享文件系统初始化环境变量初始化方法初始化后操作关闭处理重新初始化组Devic…

【K8s】整体认识K8s之Docker篇

首先认识几个名词&#xff0c;Docker-ce是docker的社区版本&#xff0c;提供给各种构建、发布、运行容器的工具&#xff1b;docker-ce-cli是社区版本的命令行工具&#xff0c;与docker守护进程进行交互&#xff1b;containerd.io是docker运行时&#xff08;containerd&#xff…

【机器学习】7 Linear regression

本章目录 7 Linear regression 217 7.1 Introduction 217 7.2 Model specification 217 7.3 Maximum likelihood estimation (least squares) 217 7.3.1 Derivation of the MLE 219 7.3.2 Geometric interpretation 220 7.3.3 Convexity 221 7.4 Robust linear regression * 2…

【卫星通信】超低码率语音编码ULBC:EnCodec神经音频编解码器架构深度解析

引言 EnCodec是由Meta AI提出的一种端到端神经音频编解码器架构&#xff0c;其核心目标是在保证音频质量的前提下实现高压缩比和低带宽传输。该模型通过结合卷积神经网络、残差矢量量化&#xff08;Residual Vector Quantization, RVQ&#xff09;、多尺度对抗训练以及Transfor…

08_正则表达式

第8课:正则表达式 课程目标 理解正则表达式的基本概念 掌握常用的正则表达式模式 学习Python中re模块的使用 能够编写简单的正则表达式 1. 正则表达式基础 1.1 什么是正则表达式 正则表达式是一种用于匹配字符串模式的工具,可以用于搜索、替换和验证文本。 1.2 基本语法 …

小迪安全v2023学习笔记(七十一讲)—— Python安全反序列化反编译格式化字符串安全

文章目录前记WEB攻防——第七十一天Python安全&反序列化利用链&PYC文件反编译&格式化字符串安全Python - PYC-反编译文件出源码介绍演示Python - 反序列化-调用链&魔术方法各类语言序列化和反序列化函数序列化和反序列化含义Python中常用的序列化/反序列化函数…