当前位置: 首页 > news >正文

2025.11.12 力扣每日一题

2654.使数组所有元素变成1的最少操作次数

题目分析

题目要求:通过 “选择下标 i,将 nums[i] 或 nums[i+1] 替换为它们的最大公约数(gcd)” 的操作,让数组所有元素变成 1,求最少操作次数;若无法实现,返回 -1

核心逻辑:

  • 操作的本质是通过相邻元素的 gcd 逐步生成 1(因为只有 gcd 为 1 时,才能生成 1)。
  • 若数组所有元素的整体 gcd 大于 1(即 gcd(nums[0], nums[1], ..., nums[n-1]) > 1),则无法生成 1,直接返回 -1
  • 若数组中已有 1,则只需将所有非 1 元素替换为 1,操作次数为 n - 1的个数
  • 若数组中没有 1,则需要先找到最短的连续子数组,其 gcd 为 1(记子数组长度为 len),再通过该子数组生成 1,然后将剩余元素替换为 1,总操作次数为 len - 1 + (n - 1)

示例理解(以示例 1 nums = [2,6,3,4] 为例)
数组中无 1,且整体 gcd 为 gcd(2,6,3,4)=1,进入步骤 3。
遍历子数组:
子数组 [3,4] 的 gcd 是 1,长度为 2,j - i = 1(min_size=1)。
总操作次数:1 + 4 - 1 = 4,与示例输出一致。

class Solution {
public:int minOperations(vector<int>& nums) {//步骤 1:判断是否存在 “全局无法生成 1” 的情况//gcd_all 是数组所有元素的最大公约数。若 gcd_all > 1,说明所有元素都是 gcd_all 的倍数,永远无法生成 1,直接返回 -1。int n = nums.size(), gcd_all = 0, cnt1 = 0;for (int x : nums) {gcd_all = gcd(gcd_all, x);//计算数组所有元素的整体gcdcnt1 += x == 1;         //统计数组中1的个数}if (gcd_all > 1)return -1;//整体gcd>1,无法生成1//步骤 2:处理 “数组中已有 1” 的情况//若数组中存在 1,则每个非 1 元素都可以通过与相邻 1 取 gcd 变为 1,操作次数为 数组长度 - 1的个数。if (cnt1)return n - cnt1;//步骤 3:处理 “数组中没有 1” 的情况int min_size = n;//遍历所有可能的子数组 nums[i..j],计算其 gcd,找到最短的 gcd 为 1 的子数组(长度为 len = j - i + 1,代码中 j - i 是 len - 1)for (int i = 0; i < n; i++) {int g = 0;for (int j = i; j < n; j++) {g = gcd(g, nums[j]);// 计算从i到j的子数组的gcdif (g == 1) {// 记录最短gcd为1的子数组长度(j-i+1的长度,这里j-i是“长度-1”)min_size = min(min_size, j - i);break;}}}//生成 1 需要 len - 1 次操作(将子数组逐步通过 gcd 生成 1),之后将剩余 n - 1 个元素替换为 1,总操作次数为 (len - 1) + (n - 1) = min_size + n - 1(因为 min_size = len - 1)。return min_size + n - 1;}
};

http://www.dtcms.com/a/605943.html

相关文章:

  • wordpress 架站 电子书石家庄网站推广
  • 有没有哪个网站可以做LCM模组阜宁县住房与城乡建设局网站
  • 天硕SSD自主主控技术解析:如何实现工业级宽温域下的高可靠存储
  • 牛客周赛round117--------题解1
  • 锂电池 SOC 估计技术综述:成熟算法、新颖突破与车企应用实践
  • 玄机-第八章 内存马分析-java01-nacos
  • 教育平台oss做视频网站网站横幅怎么更换
  • C语言程序编译器 | 提升C语言编程效率的工具与技巧
  • 网站建设 类型泰州seo
  • 基于springboot的共享汽车管理系统开发与设计
  • 灵猴机器人操作
  • 广东的一起(17)做网站ppt做视频的模板下载网站有哪些内容
  • Python编程实战 - Python实用工具与库 - 操作PDF:pdfplumber、PyPDF2
  • PDF文档导出分页功能实现
  • 甘肃住房建设厅网站深圳公司排名前50
  • 【OpenCV + VS】视频流处理与图像处理:实时视频流与视频保存
  • 【C++】map_set 的封装
  • 效益成本原则网站建设如何在网站申请做co
  • 支付网站开发怎么做账微信wordpress
  • Windows下安装Linux子系统Ubuntu
  • 做外贸营销型网站瑞安市住房和城乡规划建设局网站
  • STM32外设学习-串口数据包笔记-(数据包的了解)
  • 3ds Max文件压缩攻略
  • 合肥网站建设q479185700棒有没有做生物科技相关的网站
  • 响应式网站内容布局吉林网站模板
  • 制约楼宇自动化控制系统应用的两大因素:需求匹配与落地能力
  • 反编译易语言 | 解析易语言反编译技术与实践应用
  • 大全!桥梁结构健康实时自动化监测预警——测量设备讲解+架构
  • 快站免费网站建设哪家好网站前面的logo标志
  • 【期末网页设计作业】HTML+CSS+JS 美食分享主题网站设计与实现(附源码)