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

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

一、题目描述

二、解题思路

整体思路

通过找规律,可以分情况来解决这个问题。

具体思路

(1)若数组中存在1,那么就可以以“1”为中心进行扩散,最终将整个数组都变为1,操作次数为nums.size()-one(one为数组中1的个数),返回nums.size()-one,实现代码如下:

//如果数组中存在1

        int one=0;

        for(auto x:nums)

            if(x==1) one++;

        if(one) return nums.size()-one;

(2)若数组中不存在1,且数组中所有元素的最大公约数不为1,则代表无法将数组中的元素都变成1,就返回-1,如示例2,实现代码如下:

  //如果数组所有元素的最大公约数大于1,返回-1

        int Gcd=nums[0];

        for(auto x:nums) Gcd=gcd(Gcd,x);

        if(Gcd>1) return -1;

(3)若数组中不存在1但是存在最大公约数为1的子数组,那么就可以利用这个子数组,将这个“后天”的1进行扩散,操作次数为length-1+nums.size()-1,即length+nums.size()-2,length为最大公约数为1的数组的元素的个数。

所以,这种情况最少的操作次数即为最大公约数为1的最短子数组的长度length+nums.size()-2,这种情况需要找到最大公约数为1的最短子数组的长度,可以借助双指针来解决,实现代码如下:

 //如果数组所有元素的最大公约数为1,寻找最短gcd为1的子数组(双指针)

        int length=INT_MAX;

        for(int left=0;left!=nums.size();left++){

            Gcd=nums[left];

            for(int right=left;right!=nums.size();right++){

                Gcd=gcd(Gcd,nums[right]);

                if(Gcd==1){

                    length=min(length,right-left+1);

                    break;

                }

            }

        }

        return length+nums.size()-2;

三、代码实现

class Solution {
public:int minOperations(vector<int>& nums) {//如果数组中存在1int one=0;for(auto x:nums)if(x==1) one++;if(one) return nums.size()-one;//如果数组所有元素的最大公约数大于1,返回-1int Gcd=nums[0];for(auto x:nums) Gcd=gcd(Gcd,x);if(Gcd>1) return -1;//如果数组所有元素的最大公约数为1,寻找最短gcd为1的子数组(双指针)int length=INT_MAX;for(int left=0;left!=nums.size();left++){Gcd=nums[left];for(int right=left;right!=nums.size();right++){Gcd=gcd(Gcd,nums[right]);if(Gcd==1){length=min(length,right-left+1);break;}}}return length+nums.size()-2; }//求两个数的最大公约数int gcd(int a,int b){//递归出口if(a%b==0) return b;else return gcd(b,a%b);}
};

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

相关文章:

  • 数据结构(长期更新)第8讲:队列
  • LKT4305安全芯片身份认证介绍
  • 看门狗超时时间的理解
  • C语言编译器手机教程 | 轻松在手机上编写和编译C语言程序
  • 基于SpringBoot的企业资产管理系统开发与设计
  • 黄骅做网站价格莱芜金点子招工小时工
  • 速卖通网站怎样做店面的二维码厦门网站建设
  • 好创意网站有哪些方面幸运28网站开发
  • AI小白入门:什么是RAG技术?
  • 【一天一个计算机知识】—— 【编程百度】条件编译
  • 网站分享注册公司代理电话
  • 免费制作一个企业网站广告设计公司网页
  • Gradle vs Maven 详细对比
  • [Column#187] 10data_struct | IP速查表 | 协议TCPUDP | DeepSeek-OCR
  • 生产级HMACSHA256签名与验签案例
  • 腾讯云服务器搭建网站漯河网站建设费用
  • docker部署开源监控软件hertzbeat
  • 上海网站网站建设工程公司简介范文大全
  • STM32CubeMx学习hal库
  • 在线确定性算法与自适应启发式在虚拟机动态整合中的竞争分析与性能优化
  • 企业网站建设费多少钱硬盘做免费嗳暧视频网站
  • 做图在哪个网站上找南京自助建站模板
  • 山东市网站建设中国林业网站群建设工程
  • 大白话浅析Windows 安全核心机制
  • 【OpenCV + VS】OpenCV 随机数绘图:如何在图像中绘制随机线条
  • 个人网站可以做商城吗泰安人才信息网官网
  • 网站开发提供图片加载速度建设工程施工合同示范文本2021
  • sward实战教程系列(2) - 创建第一个知识库
  • iOS 内存管理之 autoreleasePool
  • 北京沙河教做网站的山东省济南市莱芜区