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

Leetcode-每日一题1250. 检查「好数组」(裴蜀定理)

在这里插入图片描述

题目链接:https://leetcode.cn/problems/check-if-it-is-a-good-array/description/

思路

方法:数论

题目意思很简单,让你在数组 nums中选取一些子集,可以不连续,子集中的每个数再乘以任意的数的和是否为1,是则原数组就是个「好数组」

关键词:每个数相乘任意一个数相加,数论里「裴蜀定理」是一个关于最大公约数的定理。也是拥有类似的推导(具体证明可参考「裴蜀定理」OI Wiki)。

「裴(pei)蜀定理」:设 a,b 是不全为零的整数,则存在整数 x,y, 使得 ax+by= gcd(a,b).

「裴蜀定理」同样也可以推广到多个整数的情况。对于全不为 0 的任意 n 个整数 a1, a2, a3, a4 … an,记这 n 个整数的最大公约数为 0,则对于任意 n 个整数 x1, x2, x3, x4 … xn都满足 ∑i=1nai∗xi\sum_{i=1}^{n} a_i * x_ii=1naixi 是 g 的倍数。

推论:正整数 a1 到 an 的最大公约数是 1 的充分必要条件是存在 n 个整数 x1 到 xn 满足 ∑i=1nai∗xi=1\sum_{i=1}^{n} a_i * x_i = 1i=1naixi=1

回到原题,我们判断数组 nums 是否是个「好数组」。由「裴蜀定理」推导 0 < i < n,题目等价于求 nums 中的全部数字的最大公约数是否等于 1,若等于 1 则原数组为「好数组」,否则不是。

如何求数组 nums 的 最大公约数 g,初始化 g = nums[0],遍历数组,更新 g = gcd(g, nums[i]),遍历完全部数字后,g 即为数组 nums 中全部的元素的最大公约数。然后判断其是否等于 1 即可。在实现过程中我们也可以进一步做优化:如果遍历过程中出现最大公约数等于 1 的情况,则由于 1 和任何正整数的最大公约数都是 1,此时可以提前结束遍历。

代码示例

func isGoodArray(nums []int) bool {// 有数据为[1]的情况if len(nums) == 1 && nums[0] == 1{return true}g := nums[0]for i := 1; i < len(nums); i++ {g = gcd(g, nums[i])if g == 1 {return true}}return false
}func gcd(a, b int) int {if a % b == 0 {return b}return gcd(b, a % b)
}

在这里插入图片描述

复杂度分析

  • 时间复杂度:O(n + log⁡m\log mlogm),其中n表示数组 nums 长度,m 表示与最大公约数 g 迭代次数最长的数字,其中求单次最大公约数的时间复杂度为 O(log⁡m\log mlogm),两个数求最大公约数,其中最大公约数 g 自增不减,总的求最大公约数所需时间为O(log⁡m\log mlogm),所以总的所需时间O(n + log⁡m\log mlogm)
  • 空间复杂度:O(1),不需要额外申请空间

相关文章:

Leetcode-每日一题1250. 检查「好数组」(裴蜀定理)

题目链接&#xff1a;https://leetcode.cn/problems/check-if-it-is-a-good-array/description/ 思路 方法&#xff1a;数论 题目意思很简单&#xff0c;让你在数组 nums中选取一些子集&#xff0c;可以不连续&#xff0c;子集中的每个数再乘以任意的数的和是否为1&#xff…...

OpenStack手动分布式部署环境准备【Queens版】

目录 1.基础环境准备&#xff08;两个节点都需要部署&#xff09; 1.1关闭防火墙 1.2关闭selinux 1.3修改主机名 1.4安装ntp时间服务器 1.5修改域名解析 1.6添加yum源 2.数据库安装配置 2.1安装数据库 2.2修改数据库 2.3重启数据库 2.4初始化数据库 3.安装RabbitMq…...

Web自动化测试——selenium的使用

⭐️前言⭐️ 本篇文章就进入了自动化测试的章节了&#xff0c;如果作为一名测试开发人员&#xff0c;非常需要掌握自动化测试的能力&#xff0c;因为它不仅能减少人力的消耗&#xff0c;还能提升测试的效率。 &#x1f349;欢迎点赞 &#x1f44d; 收藏 ⭐留言评论 &#x1f…...

虚拟交换单元技术

支持VSU&#xff08;Virtual Switch Unit&#xff09;即虚拟交换单元技术。通过聚合链路连接&#xff0c;将多台物理设备虚拟为一台逻辑上统一的设备&#xff0c;使其能够实现统一的运行&#xff0c;利用单一IP 地址、单一Telnet 进程、单一命令行接口(CLI)、自动版本检查、自动…...

【STM32笔记】HAL库外部定时器、系统定时器阻塞、非阻塞延时

【STM32笔记】HAL库外部定时器、系统定时器阻塞、非阻塞延时 外部定时器 采用定时器做延时使用时 需要计算好分频和计数 另外还要配置为不进行自动重载 对于50MHz的工作频率 分频为50-1也就是50M/501M 一次计数为1us 分频为50000-1也就是1k 一次计数为1ms 我配置的是TIM6 只…...

[Springboot 单元测试笔记] - Mock 和 spy的使用

Springboot单元测试 - 依赖类mock测试 通常单元测试中&#xff0c;我们会隔离依赖对于测试类的影响&#xff0c;也就是假设所有依赖的一定会输出理想结果&#xff0c;在测试中可以通过Mock方法来确保输出结果&#xff0c;这也就引入另一个测试框架Mockito。 Mockito框架的作用…...

互联网新时代要来了(二)什么是AIGC?

什么是AIGC&#xff1f; 最近&#xff0c;又火了一个词“**AIGC”**2022年被称为是AIGC元年。那么我们敬请期待&#xff0c;AIGC为我们迎接人工智能的下一个时代。 TIPS:内容来自百度百科、知乎、腾讯、《AIGC白皮书》等网页 什么是AIGC&#xff1f;1.什么是AIGC&#xff1f;…...

75V的TVS二极管有哪些型号?常用的

瞬态抑制TVS二极管工作峰值反向电压最低3.3V&#xff0c;最高可达513V&#xff0c;甚至更高。很多电子工程师都知道&#xff0c;TVS二极管在实际应用选型过程中&#xff0c;第一步要确认的就是其工作峰值反向电压。2023年春节已过&#xff0c;东沃电子正月初八就开工了&#xf…...

测试开发之Django实战示例 第十章 创建在线教育平台

第十章 创建在线教育平台在上一章&#xff0c;我们为电商网站项目添加了国际化功能&#xff0c;还创建了优惠码和商品推荐系统。在本章&#xff0c;会建立一个新的项目&#xff1a;一个在线教育平台&#xff0c;并创内容管理系统CMS&#xff08;Content Management System&…...

Hadoop高可用搭建(二)

目录 解压Hadoop 改名 更改配置文件 workers hdfs-site.xml core-site.xml hadoop-env.sh mapred-site.xml yarn-site.xml 设置环境变量 启动集群 启动zk集群 启动journalnode服务 格式化hfds namenode 启动namenode 同步namenode信息 查看namenode节点状态 …...

如何用企微SCRM管理系统发掘老客户的新增长点?

如何用企微SCRM管理系统发掘老客户的新增长点&#xff1f; 一直做投放拉新&#xff0c;很快营销成本会难以支撑&#xff0c;如果在私域运营中始终留不下老用户&#xff0c;那么运营也是失败的。 开发老客户的成本只需新客户成本的1/6&#xff0c;但很多企业对老客户都忽视了&…...

我用python疯狂爬取公司数据

我是半路从一个纯小白学过来的&#xff0c;学习途中也掉过许多坑&#xff0c;在这里建议新手要先把基础打扎实&#xff0c;然后再去学习自己需要的内容&#xff0c;不要想着全部学完再用&#xff0c;那样你是永远学不完的&#xff0c;用哪方面就学习哪方面的内容&#xff0c;不…...

EMR集群运行TPC-DS在云盘和OSS中的对比

1.简介 TPC-DS是大数据领域最为知名的Benchmark标准。本文介绍使用阿里云EMR集群运行TPC-DS在云盘和OSS中的表现对比。 2.环境准备 1.创建EEMR-5.10.1集群 1个master,2个core,3台机器都s是4c16g。 2.安装Git和Maven sudo yum install -y git maven3.下载TPC-DS Benchmark工…...

菜鸟在 windows 下 python 中安装 jupyter 踩坑要点 、被神化的 VsCode

我平时用不到 python &#xff0c;更没用过 jupyter &#xff0c;因此我的 python知识仅限于知道有 python 这么个编程语言&#xff0c;会写个 print("Hello World!!!") 而已&#xff0c;完全没听过 jupyter &#xff0c;因为某些原因今天需要安装下 jupyter 看看&am…...

k8s简单搭建

前言 最近学习k8s&#xff0c;跟着网上各种教程搭建了简单的版本&#xff0c;一个master节点&#xff0c;两个node节点&#xff0c;这里记录下防止以后忘记。 具体步骤 准备环境 用Oracle VM VirtualBox虚拟机软件安装3台虚拟机&#xff0c;一台master节点&#xff0c;两台…...

计算机SCI期刊审稿人,一般关注论文的那些问题? - 易智编译EaseEditing

编辑主要关心&#xff1a; &#xff08;1&#xff09;文章内容是否具有足够的创新性&#xff1f; &#xff08;2&#xff09;文章主题是否符合期刊的受众读者&#xff1f; &#xff08;3&#xff09;文章方法学是否合理&#xff0c;数据处理是否充分&#xff1f; &#xff08;…...

Docker迁移以及环境变量问题

问题一描述将docker容器通过docker export命令打包&#xff0c;传输到另外的服务器&#xff0c;再通过docker import命令导入后&#xff0c;发现原来docker容器中的环境变量失效了。解决方案1. 【无效方案】直接在docker容器中通过export命令设置环境变量。export LD_LIBRARY_P…...

Sphinx文档生成工具(二)

rst语法 官方的语法手册 行内的样式&#xff1a; #斜体 *message* #粗体 **message** #等宽 不能有换行 message标题 一级标题 ^^^^^^^^ 二级标题 --------- 三级标题 >>>>>>>>> 四级标题 ::::::::: 五级标题六级标题 """"…...

Python快速上手系列--JSON--入门篇

本章我们来看看json的一些应用。简单易懂还实用。一起来看看数据类型以及一些语法规则吧1、数字&#xff08;整数或浮点数&#xff09; 如&#xff1a;{"age":18, "score":70.5} 注意&#xff0c;数字直接写&#xff0c;不需要带任何符号2、字符串&#xf…...

axios中的GET POST PUT PATCH,发送请求时params和data的区别

axios 中 get/post请求方式 1. 前言 最近突然发现post请求可以使用params方式传值&#xff0c;然后想总结一下其中的用法。 2.1 分类 经过查阅资料&#xff0c;get请求是可以通过body传输数据的&#xff0c;但是许多工具类并不支持此功能。 在postman中&#xff0c;选择get请…...

2026电商客服外包TOP5实力品牌详细解读

进入2026年&#xff0c;电商行业已从粗放式扩张转向精细化运营时代&#xff0c;客户服务不再局限于简单的问答回复&#xff0c;而是成为驱动店铺销售增长、积累品牌声誉的关键要素。根据最新行业研究报告&#xff0c;专业的外包客服团队能够帮助店铺将询单转化率提高20%-30%&am…...

从零到一:在本地CentOS环境完整部署yshop-drink扫码点餐系统的实战指南

1. 环境准备&#xff1a;从零搭建CentOS基础系统 第一次在本地部署yshop-drink扫码点餐系统时&#xff0c;我选择了CentOS 7.9作为基础环境。这个版本既稳定又兼容大多数现代软件包&#xff0c;特别适合作为生产环境使用。建议直接使用阿里云镜像站下载Minimal版本ISO文件&…...

VCAM虚拟摄像头:3大创新功能解锁安卓摄像头的无限应用场景

VCAM虚拟摄像头&#xff1a;3大创新功能解锁安卓摄像头的无限应用场景 【免费下载链接】com.example.vcam 虚拟摄像头 virtual camera 项目地址: https://gitcode.com/gh_mirrors/co/com.example.vcam VCAM虚拟摄像头是一款基于Xposed框架的安卓虚拟相机解决方案&#x…...

别只盯着显卡!CES上英伟达那个能装进口袋的AI超算,普通人怎么玩?

口袋里的AI革命&#xff1a;如何用英伟达Project DIGITS打造个人智能工作站 当大多数人还在讨论RTX 50系列显卡的游戏性能时&#xff0c;英伟达在CES 2025上悄悄展示了一个可能改变未来的小玩意——Project DIGITS。这个能装进口袋的AI超算&#xff0c;搭载GB10芯片&#xff0c…...

Qwen2.5-Omni:多模态流式交互的Thinker-Talker架构与TMRoPE技术解析

1. Qwen2.5-Omni的核心设计理念 第一次接触Qwen2.5-Omni时&#xff0c;最让我惊讶的是它处理多模态数据的流畅程度。想象一下&#xff0c;你正在和AI助手讨论一段视频内容&#xff0c;它能同时理解画面中的物体、背景音乐的情绪&#xff0c;还能用自然语音回应你的问题——这就…...

Win10下Office16宏编辑器崩溃?3种修复VBE6EXT.OLB加载失败的实战方法

Win10下Office16宏编辑器崩溃&#xff1f;3种修复VBE6EXT.OLB加载失败的实战方法 每次打开VB编辑器就遭遇内存溢出弹窗&#xff0c;这种体验就像被卡在无限循环的代码里——明明只是想在Excel里跑个简单宏&#xff0c;却要面对满屏的"VBE6EXT.OLB加载失败"警告。作为…...

别再一上来就搞ETL了!聊聊我们团队在数据治理项目里踩过的第一个坑:数据资产划分

数据治理第一步&#xff1a;为什么跳过资产划分会让你的ETL工程翻车&#xff1f; 凌晨三点的办公室&#xff0c;咖啡杯已经见底&#xff0c;ETL管道却因为数据源混乱再次报错——这是许多数据团队的真实噩梦。我们团队在去年启动企业级数据治理项目时&#xff0c;也曾陷入"…...

Vue-Vben-Admin主题定制实战指南:从原理到实现的深度探索

Vue-Vben-Admin主题定制实战指南&#xff1a;从原理到实现的深度探索 【免费下载链接】vue-vben-admin vbenjs/vue-vben-admin: 是一个基于 Vue.js 和 Element UI 的后台管理系统&#xff0c;支持多种数据源和插件扩展。该项目提供了一个完整的后台管理系统&#xff0c;可以方便…...

【大模型】-名词手册-扫盲

写在前面 本篇文章用来记录在了解学习大模型的过程中遇到的一些名词缩写&#xff0c;好记性不如烂笔头&#xff0c;记录下来&#xff0c;也供大家参考。如有不正确的&#xff0c;欢迎指正。 目录写在前面名词扫盲写在后面名词扫盲 分类缩写英文全程中文备注-----智能体通信协议…...

打破协议壁垒:BthPS3如何让PS3手柄在Windows上重生

打破协议壁垒&#xff1a;BthPS3如何让PS3手柄在Windows上重生 【免费下载链接】BthPS3 Windows kernel-mode Bluetooth Profile & Filter Drivers for PS3 peripherals 项目地址: https://gitcode.com/gh_mirrors/bt/BthPS3 你是否曾经尝试将PS3手柄连接到Windows电…...