尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Kimi    LeetCode 3574. 最大子数组 GCD 分数 Rust实现
这是 LeetCode 3574. 最大子数组 GCD 分数 的 Rust 实现。解题思路核心观察翻倍操作最多只能让子数组的 GCD 乘以 2。因此对于每个子数组我们需要判断是否能通过最多 k 次翻倍操作使 GCD 翻倍。关键步骤1. 预处理统计每个数中因子 2 的个数即 x 能被 2 整除的次数2. 枚举子数组固定左端点 l向右扩展右端点 r3. 维护三个值- g当前子数组的 GCD- mi子数组中因子 2 个数的最小值- t具有最小因子 2 个数的元素个数4. 判断翻倍如果 t k说明需要翻倍的元素超过 k 个无法翻倍否则 GCD 可以翻倍时间复杂度O(n^2 \cdot \log n)空间复杂度O(n)Rust 代码rustimpl Solution {pub fn max_gcd_score(nums: Veci32, k: i32) - i64 {let n nums.len();// 预处理统计每个数中因子 2 的个数let mut cnt vec![0i32; n];for i in 0..n {let mut x nums[i];while x % 2 0 {cnt[i] 1;x / 2;}}let mut ans: i64 0;// 枚举所有子数组for l in 0..n {let mut g: i32 0; // 当前子数组 GCDlet mut mi: i32 1 30; // 最小因子 2 个数let mut t: i32 0; // 具有最小因子 2 个数的元素个数for r in l..n {// 更新 GCDg Self::gcd(g, nums[r]);// 更新最小因子 2 个数及其出现次数if cnt[r] mi {mi cnt[r];t 1;} else if cnt[r] mi {t 1;}// 判断是否能翻倍 GCD// 如果具有最小因子 2 个数的元素个数 k则无法翻倍let val if t k { g as i64 } else { (g * 2) as i64 };let len (r - l 1) as i64;ans ans.max(len * val);}}ans}// 递归实现 GCDfn gcd(a: i32, b: i32) - i32 {if b 0 {a} else {Self::gcd(b, a % b)}}}代码说明- cnt[i] 记录 nums[i] 中因子 2 的个数例如 12 2^2 × 3则 cnt[i] 2- 翻倍操作的本质是将某个数乘以 2相当于增加一个因子 2- 子数组 GCD 中因子 2 的个数取决于子数组中所有数因子 2 个数的最小值 mi- 如果具有最小值 mi 的元素个数 t k则最多 k 次翻倍无法让所有这些元素的因子 2 个数都增加GCD 无法翻倍- 否则可以通过翻倍使 GCD 乘以 2这个解法在 n \le 1500 的约束下可以通过所有测试用例。
RELATED

相关推荐

【aigc】初识mediakit-cli 和 chatcut、远程 AI 能力的命令行代理

【aigc】初识mediakit-cli 和 chatcut、远程 AI 能力的命令行代理

mediakit-cli 部署指南 仓库已克隆到: mediakit-cli 环境检查结果 依赖 要求 当前版本 状态 Node.js ≥18 v22.22.2 ✅ npm - 10.9.7 ✅ Go ≥1.22(源码构建才需要) 1.20.5 ❌ 版本过低 ffmpeg 5.1.x 8.0.1 ✅(新版本兼容) ffprobe - 8.0.1 ✅ 部署方式 该项目有 两种部…

📅 2026/9/8 22:28:58
P10098 [ROIR 2023] 地铁建设 (Day 2)

P10098 [ROIR 2023] 地铁建设 (Day 2)

记录147 #include<bits/stdc.h> using namespace std; #define ll long long // 使用long long处理大数const int MAXN105; int n; ll p; ll z[MAXN],a[MAXN],b[MAXN]; // 存储每个发动机的参数// 验证函数&#xff1a;判断电压为x时&#xff0c;总功率是否>p bool c…

📅 2026/9/5 0:59:52
P9497 「RiOI-2」weight

P9497 「RiOI-2」weight

记录146 #include<bits/stdc.h> using namespace std; #define ll long long // 防止数据溢出&#xff0c;使用long long //n*n的矩阵&#xff0c;n是1e3 &#xff0c;所以N是1e6 const int N1e65; ll a[N],n,q,cnt; // a数组存储打平后的矩阵&#xff0c;cnt记录总数字…

📅 2026/7/21 12:41:35
MORE NEWS

更多资讯

📰

WorkBuddy连接实战:四层模型、Skill配置与业务系统集成指南

《WorkBuddy 实战蓝皮书》系列写到第三篇&#xff0c;前两篇聊了基础认知和本地环境搭建&#xff0c;后台收到不少私信&#xff0c;问得最多的问题集中在——装好之后怎么让它真正“通”起来&#xff1f;这个“通”不只是网络通畅&#xff0c;更是 WorkBuddy 跟你的电脑、你的资…

📰

大模型知识表征与逻辑推理机制解析

1. 大模型知识表征的本质特征大语言模型通过海量文本训练形成的知识表征&#xff0c;本质上是一种高维空间中的分布式表示。这种表示方式与人类大脑的神经表征有相似之处&#xff0c;但存在几个关键差异点&#xff1a;首先&#xff0c;模型的知识存储是隐式的。当我们询问GPT-4…

📰

pyfem弹塑性有限元实现:本构积分与收敛问题解析

简介&#xff1a;PyFEM 是一套基于 Python 的弹塑性有限元计算程序包&#xff0c;面向力学分析、结构仿真和数值计算学习者&#xff0c;主要解决材料在载荷下的线弹性及塑性变形建模问题&#xff0c;可应用于土木、机械与航空航天等工程场景。压缩包共 88 个文件&#xff0c;包…

📰

STM32 VS Code开发环境搭建:ARM GNU工具链+CMake+OpenOCD调试闭环

1. 为什么STM32开发者正在集体“逃离”Keil&#xff0c;转向VS Code&#xff1f;你手头那块STM32F103C8T6最小系统板&#xff0c;是不是还躺在抽屉里吃灰&#xff1f;不是它不行&#xff0c;而是你用的开发环境——Keil MDK或IAR——正在悄悄拖慢你的节奏。我见过太多工程师&am…

📰

鼎阳SDS7404A H10示波器:10-bit高分辨率与4GHz带宽的工程实践指南

1. 项目概述&#xff1a;这台示波器不是“测电压的盒子”&#xff0c;而是信号世界的显微镜与时间标尺 鼎阳 SDS7404A H10 数字示波器&#xff0c;光看型号就藏着三重关键信息&#xff1a;SDS 是鼎阳科技&#xff08;Siglent&#xff09;的示波器产品线代号&#xff0c;7404A 表…

📰

[数字安全]PDR 与 P2DR 资讯安全模型比较:核心差异、应用场合与实战落地

很多做安全的人第一次看到 PDR 和 P2DR&#xff0c;反应都差不多&#xff1a;不就是多了一个 P 吗&#xff1f; 这个 P 还真不是凑数的。它把安全体系从“防护、检测、响应”三个动作&#xff0c;变成“策略驱动下的防护、检测、响应”闭环。前者更像一套技术组合&#xff0c;后…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬