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

leetcode 2654

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

首先,如果所有数的 GCD(最大公约数)大于 1,那么无论如何都无法操作出 1,我们返回 −1。如果 nums 中有一个 1,那么从 1 向左向右不断替换就能把所有数变成 1。

如果 nums 中没有 1,想办法花费尽量少的操作得出一个 1。由于只能操作相邻的数,所以这个 1 必然是一个连续子数组的 GCD。(如果在不连续的情况下得到了 1,那么这个 1 只能属于其中某个连续子数组,其余的操作是多余的。)那么找到最短的 GCD 为 1 的子数组,设其长度为 minSize,那么我们需要操作 minSize−1 次得到 1。例如 [2,6,3,4] 中的 [3,4] 可以操作 2−1=1 次得到 1。

然后就转化成提示 1 中的情况了,最终答案为(minSize−1)+(n−1)=minSize+n−2

gcd_all=gcd(gcd_all,x);

数学上规定:gcd(0, x) = |x| (任何整数与 0 的最大公约数都是它自身的绝对值)

class Solution {
public:int minOperations(vector<int>& nums) {int n=nums.size();int gcd_all=0,cnt1=0; //数学上规定:gcd(0, x) = |x|for(int x :nums){gcd_all=gcd(gcd_all,x);if(x==1) cnt1++;}if(gcd_all>1) return -1;//如果 nums 中存在 1if(cnt1) return n-cnt1;int minSize=n;for(int i=0;i<n;i++){  //找最短的 GCD 为 1 的子数组int g=0;for(int j=i;j<n;j++){g=gcd(g,nums[j]);if(g==1){minSize=min(minSize,j-i+1); //需要操作 minSize−1 次得到 1break;}}}return minSize+n-2;}
};
http://www.dtcms.com/a/603494.html

相关文章:

  • 停机问题与考拉兹猜想:循环何时终止
  • 网站建立的企业flash手机网站制作
  • 海外网站推广优化专员网站关于我们怎么做
  • 久久建筑网是个什么样的网站中文手机app开发软件
  • 旅游分析 网站制作电子商务网站
  • 中国建材网官方网站免费企业wordpress主题
  • 长沙营销型网站制如何做google推广
  • 惠州seo网站管理汕头百姓网二手车交易市场
  • 营销型网站建设方案演讲ppt用ps做零食网站模板
  • 网站开发具备知识有哪些网站开发代码
  • cocos 发布 安卓应用
  • 元素周期表:宇宙给人类的“积木说明书”
  • 网店美工设计seo 网站 结构
  • 兰州产品营销网站建设网站开发前台软件用什么
  • 北京网站建设laitang医院手机网站模板
  • 图书管理系统网站开发设计过程网站备案幕布申请
  • wordpress 关闭多站点锦屏县城乡和建设局网站
  • 易语言开发编译器 | 提升编程效率与开发体验
  • 网站开发 定制 合同 模板推广seo是什么意思
  • 【算法笔记 11】贪心策略六
  • 专做机酒的网站flash网站导航怎么做
  • (论文速读)GC-Net:用于钢材表面缺陷检测的全局关注模块和级联融合网络
  • 怎么用网站源码建站逆袭做富豪官方网站
  • 网站建设的实验结论装修工人找活平台
  • php mysql网站开发教程wordpress首页显示指定分类文章
  • 校园网站建设整改建议建设博物馆网站
  • 做便民网站都需要提供什么梦幻创意北京网站建设
  • 建设仿优酷视频网站wordpress游客评论游客
  • 服务器上怎做网站安装好采集侠网站地图后在哪里查看网站地图
  • 阿里TTL(Transmittable Thread Local)实现原理