2022-09-07:给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如,序列 [4,6,16] 的最大公约数是 2 。 数组的一个
2022-09-07:给你一个由正整数组成的数组 nums 。
数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。
例如,序列 [4,6,16] 的最大公约数是 2 。
数组的一个 子序列 本质是一个序列,可以通过删除数组中的某些元素(或者不删除)得到。
例如,[2,5,10] 是 [1,2,1,2,4,1,5,10] 的一个子序列。
计算并返回 nums 的所有 非空 子序列中 不同 最大公约数的 数目 。
输入:nums = [5,15,40,5,6];
输出:7。
答案2022-09-07:
n/1 + n/2 + n/3 + n/4 + … + n/n 收敛于 O(N * logN),N是最大值,当做结论记住。
代码用rust编写。代码如下:
fn main() {
let mut arr = vec![5, 15, 40, 5, 6];
let ans = count_different_subsequence_gcds(&mut arr);
println!("ans = {}", ans);
}
const MIN_VALUE: i32 = -1 << 31;
// n不是数字的个数,是数组中的最大值
// 体系学习班,
// 根据数据量猜解法,
// 要想通过测试,一定要让计算量不超过10的7次方~10的8次方
// n/1 + n/2 + n/3 + n/4 + ... + n/n -> O(N * logN)
fn count_different_subsequence_gcds(nums: &mut Vec<i32>) -> i32 {
// 找到数组中的最大数!max
let mut max = MIN_VALUE;
for num in nums.iter() {
max = get_max(max, *num);
}
// 1~max,哪个数有哪个数没有
let mut set: Vec<bool> = vec![];
for _ in 0..max + 1 {
set.push(false);
}
for num in nums.iter() {
set[*num as usize] = true;
}
let mut ans = 0;
// a是当前想确定,是不是某个子序列的最大公约数,有a!
let mut a = 1;
while a <= max {
// 1)找到,离a最近的,a的倍数!1 2 3 ... g就是
let mut g = a;
while g <= max {
if set[g as usize] {
break;
}
g += a;
}
// 2) 找到了a最近的倍数,g
// g + 0 , g ?= a
// g + a , g ?= a
// g + 2a , g ?= a
// g + 3a , g ?= a
let mut b = g;
while b <= max {
if set[b as usize] {
g = gcd(g, b);
if g == a {
ans += 1;
break;
}
}
b += a;
}
a+=1;
}
return ans;
}
fn gcd(m: i32, n: i32) -> i32 {
if n == 0 {
m
} else {
gcd(n, m % n)
}
}
fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
if a > b {
a
} else {
b
}
}
执行结果如下:

2022-09-07:给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如,序列 [4,6,16] 的最大公约数是 2 。 数组的一个的更多相关文章
- 最接近的三数之和(给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数, 使得它们的和与 target 最接近。返回这三个数的和)
例如,给定数组 nums = [-1,2,1,-4], 和 target = 1. 与 target 最接近的三个数的和为 2. (-1 + 2 + 1 = 2). 思路:首先对数组进行排序 ...
- Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)
自2019年10月首次发布以来,Dapr(Distributed Application Runtime,分布式应用运行时)因其"更稳定"."更可靠".&quo ...
- 4.给定一个正整数m,统计m的位数,分别打印每一位数字,再按照逆序打印出各位数字。 要求:m定义为类的属性,需定义构造函数为m赋值;当m大于99999时,输出错误信息“the number is too large”,不再执行。
package a; public class ShuZi { int m; public int getM() { return m; } public void setM(int m) { thi ...
- 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数.例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次. 分析:首先最先想到的是遍历从1到n的每 ...
- 16进制字符串转换为byte数组
/// <summary> /// 16进制字符转换为byte数组 /// </summary> /// <param name="hexString" ...
- 输入正整数n,求各位数字和
import java.util.Scanner; /** * @author:(LiberHome) * @date:Created in 2019/3/5 10:24 * @description ...
- 正整数构成的线性表存放在单链表中,编写算法将表中的所有的奇数删除。(C语言)
/* 正整数构成的线性表存放在单链表中,编写算法将表中的所有的奇数删除 */ #include <stdio.h> #include <stdlib.h> typedef st ...
- TypeLoadException: 未能从程序集“ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型“ECS.GUI.Define.ArmgAimPos”,因为它在 4 偏移位置处包含一个对象字段,该字段已由一个非对象字段不正确地对齐或重叠
TypeLoadException: 未能从程序集"ECS.GUI.Define, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null ...
- 16进制字符串和byte数组进行相互转换\将10进制转换为任意进制
16进制字符串和byte数组进行相互转换 简介 1个byte对应8个bit,16进制使用4个bit,所以一个byte转成16进制,占用两位. JAVA代码 private static final c ...
- 在ASP.Net MVC 中,如何在Global.asax中配置一个指向Area内部的默认Route
ASP.Net MVC 中配置Route的时候可以设置一个默认的Route. 比如我要在输入http://localhost的时候默认进入http://localhost/home/index.可以在 ...
随机推荐
- 修改百分浏览器(centbrowser)、谷歌和火狐浏览器默认字体的方法
1,百分浏览器(centbrowser) 在浏览器的安装位置D:\Program Files\Cent Browser\User Data编辑文件custome.css,如果没有此文件可新建一个,内容 ...
- flask - fastapi (python 异步API 框架 可以自动生成swagger 文档) 常用示例 以及整合euraka nacos
flask - fastapi (python 异步API 框架 可以自动生成swagger 文档) 常用示例: 之前使用 flask 需要手动写文档, 这个可以自动生成, fastapi ...
- Kotlin 基础
Kotlinbase.kt @file:JvmName("kotlinbaseTest") import kotlin.math.roundToInt as atoInt fun ...
- mysql zip安装步骤
1. 官网下载社区版 https://dev.mysql.com/downloads/mysql/ 版本5.7或者8.0 2. 解压到指定的目录. 3.创建my.ini文件,编辑内容: [mysqld ...
- 一个.Net Core开源缓存中间件,让你更加简单、方便使用缓存
上次给大家推荐过一个缓存中间件<一个C#开发的非常实用的缓存中间件>,今天再给大家推荐一个缓存中间件,两者功能差不多,都是提供统一接口.多级缓存.分布式缓存.支持多种Provider等. ...
- Linux Bash Shell 中变量的 5 个易错点
Linux 中的 Bash 脚本支持对变量的操作,下面咸鱼将介绍 Linux Bash Shell 中关于变量的 5 个易错点 因为编程习惯,这类现象往往发生在大多数使用过其他流行编程语言的程序员身上 ...
- Eclipse安装和配置环境教程(图文详解)
前言 在上一篇文章中,壹哥给大家介绍了Notepad++这个更高级点的记事本,它进行Java开发相比windows自带的记事本要更方便一些.但是即便如此,用这种记事本进行Java开发效率依然很低.如果 ...
- vulnhub靶场之HACKSUDO: 2 (HACKDUDO)
准备: 攻击机:虚拟机kali.本机win10. 靶机:hacksudo: 2 (HackDudo),下载地址:https://download.vulnhub.com/hacksudo/hackdu ...
- 有执行语句:console.log(fn2(2)[3]),补充函数,使执行结果为"hello"
function fn2(a){ return [1,2,3,"hello"];}console.log(fn2(2)[3])//hello 这个2是混淆视线的,即使没有这个2.函 ...
- Windows 11 Update Download Error Solution - 0x80248007
I had the same issue on a Windows 2019 virtual server while performing routine windows updates. The ...