leetcode.1819 序列中不同最大公约数的数目 - gcd + 枚举

news2025/1/14 18:21:46

1819. 序列中不同最大公约数的数目

目录

1、java版 

2、c++版


思路:

  • 有n个元素的数组,则其子序列有 2^{n} 个,而1 ≤ n ≤ 10^{5} ,则不可能枚举每一个子序列计算它的gcd,那样会tle
  • 我们可以逆转思路,因为1 ≤ nums[i] ≤ 2*10^{5} ,而最大公约数不可能超过数组的最大值maxv
  • 所以我们可以枚举所有gcd,范围就是【1,maxv】,看是否有子序列满足,满足即res+1
  • 如何判断有子序列的gcd=当前枚举的gcd?
  • 满足条件的子序列满足所有元素都是gcd的倍数,但是有的子序列所有元素都是枚举的i的倍数,但子序列的最大公约数≠i,比如【6,12】,当枚举到3时,它们都是3的倍数,但它们的最大公约数是6,所以不满足gcd=3
  • 子序列个数越多,最大公约数越小,越可能==枚举的i
  • 因此我们枚举【1,maxv】范围内所有gcd,找出gcd的倍数,看是否在nums数组内,如果在,则不断更新gcd,如果gcd==i,则说明找到一个满足条件的子序列

  • eg:【6,10,3】枚举i=1
  • 枚举1的倍数3,存在于nums,更新gcd=3
  • 枚举1的倍数6,存在于nums,更新gcd=3
  • 枚举1的倍数10,存在于nums,更新gcd=1
  • gcd==1 则说明【6,10,3】子序列满足条件 res++

gcd(x,0)=x 0和任何整数的最大公约数等于该整数 

1、java版 

class Solution {
    public int gcd(int a,int b)
    {
        return b!=0? gcd(b,a%b):a;
    }
    public int countDifferentSubsequenceGCDs(int[] nums) {
        int maxv=Arrays.stream(nums).max().getAsInt();
        boolean[] mp=new boolean[maxv+1];
        for(int x:nums) mp[x]=true;
        
        int res=0;
        for(int i=1;i<=maxv;i++) //枚举每个gcd
        {
            int g=0; //gcd(x,0)=x
            for(int j=i;j<=maxv;j+=i) //枚举i的倍数
            {
                if(mp[j]) g=gcd(j,g); //子序列个数越多,gcd越小,越容易=i
                if(g==i) {res++;break;} 
            }
        }
        return res;
    }
}

2、c++版

class Solution {
public:
    int countDifferentSubsequenceGCDs(vector<int>& nums) {
        int maxv=*max_element(nums.begin(),nums.end());
        bool mp[maxv+1];
        memset(mp,0,sizeof(mp));
        for(int x:nums) mp[x]=true;
        int res=0;
        for(int i=1;i<=maxv;i++)
        {
            int g=0;
            for(int j=i;j<=maxv;j+=i)
            {
                if(mp[j]) g=gcd(g,j);
                if(g==i) {res++;break;}
            }
        }
        return res;
    }
};

 

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

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

相关文章

PhysioNet2017数据集介绍

一、数据集下载 PhysioNet2017为短单导联心电图记录的房颤分类数据集&#xff0c;下载地址如下&#xff1a;https://www.physionet.org/content/challenge-2017/1.0.0/ 二、数据集介绍 PhysioNet2017数据集主要用于对记录是否显示正常窦性心律、心房颤动&#xff08;AF&…

背包问题= =

一、01背包有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i件物品的体积是 vi&#xff0c;价值是 wi。求解将哪些物品装入背包&#xff0c;可使这些物品的总体积不超过背包容量&#xff0c;且总价值最大。输出最大价值。&#xff08;下图是例子&#xff0c;一下…

14、ThingsBoard-自定义华为云SMS规则节点

1、概述 一个物联网平台承载着很多设备的连接,当设备出现异常的时候,能够快速的通知到运维管理员是非常重要的,thingsboard提供了自定义配置邮箱,但是它对支持发送短信的不是很友好,都是国外的sms服务商,我反正是不用那个,在国内常见就是阿里、腾讯、华为、七牛常用的s…

【Python百日进阶-数据分析】Day224 - plotly漏斗图px.funnel()

文章目录一、语法二、参数三、返回值四、实例4.1 使用 plotly.express 的漏斗图4.1.1 基本漏斗图4.1.2 堆积漏斗图4.1.3 基本区域漏斗图4.2 使用 plotly.graph_objects 的漏斗图4.2.1 基本漏斗图4.2.2 设置标记大小和颜色4.2.3 堆积漏斗图4.2.4 基本区域漏斗图4.2.5 在区域漏斗…

Postgresql遇到的问题

解决问题之前最好先下载个pgadmin可视化工具&#xff0c;下面可能要用到。先看图&#xff0c;了解基本的\n 代表是当前数据库下面schemas的文件\du 代表你有这写用户&#xff08;角色&#xff09;&#xff0c;后面代表的权限\l 代表的是你的数据库在敲命令之前你德先进去docker…

excel表格技巧:Ctrl+T在超级表中的妙用

在介绍超级表的其它奇妙功能之前&#xff0c;小编先给大家说一个在创建超级表时应该注意的小细节。在创建超级表的对话框里&#xff0c;有一个“表包含标题”的选项&#xff0c;大家一定要记得勾选哦&#xff0c;不然超级表就会变成下面这样&#xff1a;超级表会自作聪明的在表…

【ROS】package.xml文件解析

文章目录 文章目录 前言 一、基本格式 1.基本结构 2.必要标签 3.依赖关系 二、Metapackage包 总结 前言 ros每个功能包中都有一个包清单&#xff0c;它是一个名为package.xml的XML 文件&#xff0c;它必须包含在任何符合 catkin 的包的根文件夹中。此文件定义有关包的属…

Vue过滤器

Vue过滤器1. 概述2. 全局过滤器与局部过滤器2.1 过滤器参数2.2 过滤器的串联1. 概述 在Vue.js中&#xff0c;过滤器主要用于文本的格式化&#xff0c;或者组件数据的过滤与排序等。从Vue2.0.0版本开始&#xff0c;内置的过滤器已经被删除&#xff0c;需要自己编写。 2. 全局过…

【OpenGL学习】绘制三角形

绘制三角形 上节中完成了窗口的绘制&#xff0c;这节我们主要实现在窗口中完成一个最简单的三角形的绘制&#xff0c;同样&#xff0c;要完成一个三角形的绘制&#xff0c;需要以下内容&#xff1a; Vertex Array 存放顶点数据的数组&#xff08;实际上存放的是顶点数据的指针…

Imagination与Synopsys携手加快移动端与数据中心3D可视化技术的发展

IMG CXT GPU与Synopsys Fusion QIK一同优化移动光追应用的PPA中国北京 - 2023年1月13日- Imagination Technologies与领先的电子设计自动化&#xff08;EDA&#xff09;解决方案和服务商Synopsys一起为移动光追解决方案打造一个更加快速、高效的设计流程。光追技术通过模仿光线…

1.1、操作系统的概念、功能和目标

整体框架 1、操作系统的层次结构 对于操作系统&#xff1a; 负责管理协调硬件、软件登计算机资源的工作为上层的应用程序、用户提供简单易用的服务操作系统是系统软件&#xff0c;而不是硬件 对于裸机&#xff08;纯硬件&#xff09;&#xff1a; 例如&#xff1a;CPU、内存…

2023年音视频开发前景如何?音视频开发需要掌握哪些技术?

引言 音视频开发这一行业其实已经出现了有些年头了&#xff0c;但为什么现在就突然火爆了起来呢&#xff1f;实则就是两个字&#xff0c;需求&#xff1b;在这两年中&#xff0c;人们将工作、生活、学习相关的作业都其变成线上化&#xff0c;所以短视频、超高清视频和实时音视频…

【C++】STL容器:list的模拟实现

一、list的结构 1. list的节点 list的底层是一个带头双向循环链表&#xff0c;但list本身和list的节点是不同的结构&#xff0c;需要分开实现。 list节点的结构&#xff1a; template<class T> struct list_node {list_node<T>* _next;list_node<T>* _pre…

ELK日志(4)

搭建filebeatredislogstasheskibana架构&#xff0c;拓扑图参考ELK&#xff08;3&#xff09;安装redis&#xff0c;并启动&#xff08;1&#xff09;准备安装和数据目录[rootes ~]# mkdir -p /opt/redis_cluster/redis_6379/{conf,logs,pid}&#xff08;2&#xff09;下载redi…

CES 2023:推动低碳化与数字化,英飞凌塑造可持续未来

在参展CES 2023的3200多家企业当中&#xff0c;英飞凌虽然在规模上还比不上某些国际科技巨头&#xff0c;但是其展示的内容却相当引人瞩目。作为一家创立于1999年的高科技企业&#xff0c;英飞凌在全球总计拥有56个研发机构&#xff0c;20个生产工厂&#xff0c;其技术实力之雄…

fiddler 抓手机的包

目录 一、fiddler抓手机包的介绍 二、一个前提&#xff0c;及配置 1.前提 2.前提配置 三、两大步 1.设置fiddler 2.设置手机 一、fiddler抓手机包的介绍 Fiddler是一款非常流行并且实用的http抓包工具&#xff0c;它的原理是在本机开启了一个http的代理服务器&#xff…

分享111个JavaScript源码,总有一款适合您

JavaScript源码 分享111个JavaScript源码&#xff0c;总有一款适合您 源码下载链接&#xff1a;https://pan.baidu.com/s/1aUIpouX5nTwW1FF-8lStnw?pwdjh3v 提取码&#xff1a;jh3v 采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 ​ 下面是文件的名字&#xff0c;我放…

Golang Web Application

Golang Web Application GoLang Web App基本设置 1.导入库 导入fmt和net/http,http建立一个/和编写一个indexPage的函数,fmt编写一个写Hello world! package mainimport ("fmt""net/http" )func main() {http.HandleFunc("/", indexPage)http.L…

[数据结构复习]自用大纲

内容多基于王道和李春葆《数据结构教程》&#xff0c;做复习提纲之用 基本内容回顾 顺序队 队列是线性表&#xff08;具有逻辑上的前驱后继关系&#xff09;。头插尾删&#xff0c;先进先出。 队列的实现至少需要维护如下内容&#xff08;一数组&#xff0c;二指针&#xff…

电脑开机屏幕闪烁后变成蓝屏无法启动怎么办?

电脑开机屏幕闪烁后变成蓝屏无法启动怎么办&#xff1f;有用户在将电脑开机之后&#xff0c;出现了屏幕会闪动的情况&#xff0c;接着电脑屏幕就变成蓝屏的了。而且再次启动的时候也是这样。这个情况下是我们的系统出现了问题&#xff0c;我们来看看如何去使用U盘进行系统重装的…