解决leetcode第3671.子序列美丽值求和问题

3671. 子序列美丽值求和

难度:困难

问题描述:

给你一个长度为 n 的整数数组 nums。

对于每个 正整数 g,定义 g 的 美丽值 为 g 与 nums 中符合要求的子序列数量的乘积,子序列需要 严格递增 且最大公约数(GCD)恰好为 g 。

请返回所有正整数 g 的 美丽值 之和。

由于答案可能非常大,请返回结果对 109 + 7 取模后的值。

子序列 是一个 非空 数组,可以通过从另一个数组中删除某些元素(或不删除任何元素)而保持剩余元素顺序不变得到。

示例 1:

输入:nums = [1,2,3]

输出:10

解释:

所有严格递增子序列及其 GCD 如下:

子序列 GCD

[1]     1

[2]     2

[3]     3

[1,2]     1

[1,3]     1

[2,3]     1

[1,2,3] 1

计算每个 GCD 的美丽值:

GCD 子序列数量 美丽值 (GCD × 数量)

1   5          1 × 5 = 5

2   1          2 × 1 = 2

3   1          3 × 1 = 3

美丽值总和为 5 + 2 + 3 = 10。

示例 2:

输入:nums = [4,6]

输出:12

解释:

所有严格递增子序列及其 GCD 如下:

子序列 GCD

[4]     4

[6]     6

[4,6]     2

计算每个 GCD 的美丽值:

GCD 子序列数量 美丽值 (GCD × 数量)

2   1          2 × 1 = 2

4   1          4 × 1 = 4

6   1          6 × 1 = 6

美丽值总和为 2 + 4 + 6 = 12。

提示:

1 <= n == nums.length <= 104

1 <= nums[i] <= 7 × 104

问题分析:

解决这个问题需要分别解决以下子问题:

  1. 如何生成一个列表的所有子序列
  2. 如何求一个子序列的gcd值
  3. 对gcd值进行分类统计,相同的gcd值数量有多少个
  4. 根据gcd值以及其数量计算美丽值总和

生成一个列表的所有子序列,可以这样处理,对于有n个元素的列表,我们把包含一个元素、两个元素、......、n-1个元素的子序列依次分别找出,最后再加上列表本身,就可以构成所有的子序列。为此设计函数get_one_from_nlist(a),其功能是对有n个元素的列表去掉一个元素,返回生成的子序列的列表,这个列表中的元素应该就是有n-1个元素的子序列,如果继续对这子序列列表中的每个元素进行再去掉一个元素的处理,就可以得到n-2个元素的子序列列表,依此方法处理,就可以得到所的子序列。

求一个子序列的gcd值,方法是先计算最前面两个元素的gcd值,然后把剩下元素与生成的gcd值构成一个新的列表,再进行相同的处理,直到序列中的元素只有一个的时候,那么这个元素就是这个子序列的gcd值。这通过函数get_gcd_from_array(a)实现。

函数get_all_sub_array_gcd(a)对所有子序列进行gcd值计算,并按gcd值进行分类统计,以方便计算美丽值之和。

最后在主程序中根据按gcd值分类统计的情况计算美丽值之和并输出。

程序如下:

import math
#返回在列表a中去掉一个元素生成的子序列
def get_one_from_nlist(a):n=len(a)b=[]for i in range(n):t=a[:i]+a[i+1:]b.append(t)return b#返回在列表a中去掉k个元素生成的子序列
def get_k_from_nlist(k,a):# b=[]n=len(a)t=n-kc=[a]while t>0:b=[]for i in c:d=get_one_from_nlist(i)# print(d)for j in d:if j in b:continueelse:b.append(j)c=b[::]t=t-1c.sort()return c#返回列表a的所有子序列
def get_all_sub_array(a):n=len(a)b=[]for i in range(1,n):t=get_k_from_nlist(i,a)b.extend(t)b.append(a)b.sort(key=lambda x:(len(x)))return b#返回列表a中所有整数的GCD
def get_gcd_from_array(a):n=len(a)while n!=1:t=math.gcd(a[0],a[1])b=a[2:]b.append(t)a=bn=len(a)return a[0]#计算并返回所有子序列的gcd值
def get_all_sub_array_gcd(a):b=[]for i in a:t=get_gcd_from_array(i)print(f'子序列:{i},对应的gcd:{t}')b.append(t)c=set(b)d=[]for i in c:print(f'gcd值为{i}的数量有{b.count(i)}个')d.append([i,b.count(i)])return d#主程序
a=eval(input('pls input a='))
#计算列表的所有子序列
sub_array=get_all_sub_array(a)
#计算列表所有子序列的gcd值并按gcd值进行统计
b=get_all_sub_array_gcd(sub_array)
#计算子序列美丽值的和
s=0
for i in b:s=s+i[0]*i[1]
s=s%(10**9+7)
print(f'子序列美丽值之和为:{s}')

运行实例一

pls input a=[2,3,4]

子序列:[2],对应的gcd:2

子序列:[3],对应的gcd:3

子序列:[4],对应的gcd:4

子序列:[2, 3],对应的gcd:1

子序列:[2, 4],对应的gcd:2

子序列:[3, 4],对应的gcd:1

子序列:[2, 3, 4],对应的gcd:1

gcd值为1的数量有3个

gcd值为2的数量有2个

gcd值为3的数量有1个

gcd值为4的数量有1个

子序列美丽值之和为:14

运行实例二

pls input a=[4,8]

子序列:[4],对应的gcd:4

子序列:[8],对应的gcd:8

子序列:[4, 8],对应的gcd:4

gcd值为8的数量有1个

gcd值为4的数量有2个

子序列美丽值之和为:16

运行实例三

pls input a=[5,10,3,9]

子序列:[3],对应的gcd:3

子序列:[5],对应的gcd:5

子序列:[9],对应的gcd:9

子序列:[10],对应的gcd:10

子序列:[3, 9],对应的gcd:3

子序列:[5, 3],对应的gcd:1

子序列:[5, 9],对应的gcd:1

子序列:[5, 10],对应的gcd:5

子序列:[10, 3],对应的gcd:1

子序列:[10, 9],对应的gcd:1

子序列:[5, 3, 9],对应的gcd:1

子序列:[5, 10, 3],对应的gcd:1

子序列:[5, 10, 9],对应的gcd:1

子序列:[10, 3, 9],对应的gcd:1

子序列:[5, 10, 3, 9],对应的gcd:1

gcd值为1的数量有9个

gcd值为3的数量有2个

gcd值为5的数量有2个

gcd值为9的数量有1个

gcd值为10的数量有1个

子序列美丽值之和为:44

精心分析,抽取功能,设计函数,协调配合,完成求解。

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

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

相关文章

电机控制(一)-电机分类

电机分类 电机分类&#xff1a; 电机的拓扑模型并没有发生太大变化,变化较大的是控制电机的方法。 常见的电机类型有&#xff1a; 步进电机vs伺服电机 在工业自动化、机器人、精密设备等领域&#xff0c;步进电机和伺服电机是两种最常用的驱动电机&#xff0c;但两者的核心…

【Qt】QToolBar、QToolButton的常用用法

一、QToolBar 常用用法 QToolBar 是 Qt 中用于创建工具栏的控件&#xff0c;可快速放置常用功能按钮、分隔符或自定义控件&#xff0c;并支持拖动停靠、浮动等特性。 1. 基础创建与添加到主窗口 // 在 QMainWindow 中创建工具栏 QToolBar *toolBar new QToolBar(tr("主工…

DVWA靶场通关笔记-验证码绕过Insecure CAPTCHA (Impossible级别)

目录 一、reCAPTCHA 1、配置security为Impossible级别。 2、配置RECAPTCHA参数 3、再次打开靶场 二、源码分析 1、index.php 2、impossible.php 3、功能函数 三、reCAPTCHA 防范分析 1、严格的参数验证与处理 2、预处理防止SQL注入 3、CAPTCHA 验证通过 4、验证当前…

MySQL安装(如果之前有安装过MySQL,先执行下面的卸载流程)

1.安装MySQL 1.1更新系统的软件包列表 sudo apt-get update1.2安装MySQL服务器 sudo apt-get install mysql-server1.3检查MySQL服务是否启动&#xff0c;若没有启动手动启动若没有启动执行&#xff1a; sudo service mysql start1.4登录MySQL&#xff08;默认安装之后不需要密…

Streamlit 数据看板模板:非前端选手快速搭建 Python 数据可视化交互看板的实用工具

你想想看&#xff0c;平时你用 Python 跑出来一堆数据 —— 比如用户留存率、产品销量变化&#xff0c;想给领导或者同事看&#xff0c;总不能直接发个 CSV 文件或者一堆静态图吧&#xff1f;对方看的时候还得自己翻数据&#xff0c;想对比下上个月和这个月的变化都费劲&#x…

FMC、FMC+ 详解

文章目录FMC 简介FMC 引脚输出定义High-pin count (HPC) connector, HPC pinoutLow-pin count (LPC) connector, LPC pinoutPin and signal descriptionFMC 简介VITA57 标准更新历史VITA57.4 标准推出的原因FMC 引脚输出定义Altera 开发板的 FMC 引脚定义英特尔 Arria 10 GX FP…

小迪web自用笔记24

黑名单机制。如果被过滤可以试试PHP5看看过滤没&#xff08;或者其他变种变形&#xff09;&#xff0c;但是得看环境有些环境会被当成下载&#xff0c;有些会直接打开。白名单机制只允许这几个特定后缀可以上传&#xff0c;比黑名单更安全。直接从信息图中获取文件类型。文件类…

私有部署问卷系统、考试系统、投票系统、测评系统的最佳选择-调问开源问卷表单(DWSurvey)

在选择私有部署问卷系统的时候&#xff0c;调问问卷系统(DWSurvey)是一定要尝试一下&#xff0c;而且可以应用到私有部署考试系统、私有部署投票系统、私有部署测评系统等多个应用场景。 私有部署问卷、考试、测评、投票系统的优势不言而喻&#xff0c;就拿私有部署考试系统来说…

企业实用——MySQL的备份详解

序言: 本次基于mysql8.0.40来给大家做数据库的备份的实用技巧和思路!对于mysql基础的部分后续我会节选部分给大家讲解,本篇文章适合有一定数据库基础的小伙伴看。 目录 一、MySQL备份概述 1、关于数据保存你要知道 2、到底要备份什么 备份什么 MySQL体系结构(MySQL =…

使用 FunASR 工具包实现音频文件的语音识别

使用 FunASR 工具包实现音频文件的语音识别&#xff0c;并将识别结果保存为文本文件&#xff0c;支持单文件处理和批量处理。电脑环境需要配置&#xff0c;我使用的PyTorch版本: 2.4.1cu121&#xff0c;CUDA可用: True。FunASR 是一个功能强大、性能卓越、面向工业应用的语音识…

【STM32】定时器编码器接口

【STM32】定时器编码器接口一、编码器接口1.1 正交编码器1.2 编码器接口基本结构1.3 工作模式二、编码器接口测速一、编码器接口 编码器接口可接收增量&#xff08;正交&#xff09;编码器的信号&#xff0c;根据编码器旋转产生的正交信号脉冲&#xff0c;自动控制CNT的自增或…

浪潮科技Java开发面试题及参考答案(120道题-中)

请介绍一下 SpringMVC 的运行流程&#xff1f;从用户发送请求到响应返回的完整步骤是什么&#xff1f;SpringMVC 是基于MVC架构的Web框架&#xff0c;其运行流程围绕“前端控制器&#xff08;DispatcherServlet&#xff09;”展开&#xff0c;通过多个组件协同工作&#xff0c;…

k8s初始化常见问题

执行初始化&#xff1a;kubeadm init --apiserver-advertise-address192.168.88.110 --image-repository registry.aliyuncs.com/google_containers --pod-network-cidr10.244.0.0/16 --control-plane-endpointweb01报错信息&#xff1a;age-repository registry.aliyuncs.com/…

Python学习笔记--使用Django修改和删除数据

一、修改方式一&#xff1a;模型类的对象.属性 更改的属性值&#xff0c;模型类的对象.save()返回值&#xff1a;编辑的模型类的对象。def update_book(request):book models.Book.objects.filter(pk1).first()book.price "169"book.save()return HttpResponse(bo…

如何评价2025年数学建模国赛?

2025年全国大学生数学建模竞赛将于9月4日正式举行&#xff01; 有些第一次参加数学竞赛的同学可能觉得自己还没准备好&#xff0c;临近比赛感到紧张很正常&#xff0c;但需调整心态——数学建模比赛本就是学习过程&#xff0c;遇到不会的知识及时搜索、现学现用即可&#xff0…

uniapp [全端兼容] - 实现全景图Vr 720°全景效果查看预览功能,3D全景图流畅不卡顿渲染+手势拖拽+悬浮工具按钮,uniAPP实现vr看720度全景效果示例代码(H5小程序APP全兼容)

前言 如果您需要 Vue 版本,请访问 这篇文章。 在 uni-app 全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)开发中,详细实现全景图Vr 720全景查看+用户可流畅拖动预览+自定义工具栏/按钮元素等,uniApp如何实现在线观看720度全景图,适用于全景图VR看房…

51单片机-实现串口模块教程

本章概述思维导图&#xff1a;51单片机实现串口模块教程通信基本概念通信&#xff0c;至少是需要两个对象&#xff0c;一个收一个发数据。根据数据通信的传输时序协调方式&#xff0c;可分为&#xff1a;同步通信和异步通信&#xff1b;根据数据通信的传输线路可分为&#xff1…

Linux echo 命令使用说明

echo 命令使用说明&#xff08;Linux&#xff09; 适用环境 Bash/Zsh 等常见 Shell&#xff08;echo 通常为内建命令&#xff09;也可能存在外部 /bin/echo&#xff08;行为与内建略有差异&#xff09; 基本语法 echo [选项] [字符串...]常用选项 -n: 结尾不输出换行-e: 解析反…

Java搭建高效后端,Vue打造友好前端,联合构建电子采购管理系统,实现采购流程电子化、自动化,涵盖采购全周期管理,功能完备,附详细可运行源码

前言&#xff1a;在当今数字化浪潮席卷的时代&#xff0c;企业的采购管理面临着前所未有的挑战与机遇。传统采购模式因流程繁琐、效率低下、信息不透明等问题&#xff0c;已难以满足企业快速发展的需求。电子采购管理系统作为一种创新的采购解决方案&#xff0c;借助先进的信息…

应用开发使用缓存

在 Java 开发的典型架构&#xff08;结合前端、后端、MyBatis、MySQL 及缓存机制&#xff09;中&#xff0c;缓存层次可以从前端到后端再到数据库进行划分&#xff0c;通常涉及以下多层缓存&#xff1a;1. 前端缓存浏览器缓存&#xff1a;浏览器自带的缓存机制&#xff08;如 H…