Leetcode刷题(四十二)

news2024/7/16 19:24:51

美丽下标对的数目(Easy)

给你一个下标从 0 开始的整数数组 nums 。如果下标对 i、j 满足 0 ≤ i < j < nums.length ,如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 ,则认为 nums[i] 和 nums[j] 是一组 美丽下标对 。

返回 nums 中 美丽下标对 的总数目。

对于两个整数 x 和 y ,如果不存在大于 1 的整数可以整除它们,则认为 x 和 y 互质 。换而言之,如果 gcd(x, y) == 1 ,则认为 x 和 y 互质,其中 gcd(x, y) 是 x 和 y 的 最大公因数 。

示例 1:

输入:nums = [2,5,1,4]
输出:5
解释:nums 中共有 5 组美丽下标对:
i = 0 和 j = 1 :nums[0] 的第一个数字是 2 ,nums[1] 的最后一个数字是 525 互质,因此 gcd(2,5) == 1 。
i = 0 和 j = 2 :nums[0] 的第一个数字是 2 ,nums[2] 的最后一个数字是 121 互质,因此 gcd(2,1) == 1 。
i = 1 和 j = 2 :nums[1] 的第一个数字是 5 ,nums[2] 的最后一个数字是 151 互质,因此 gcd(5,1) == 1 。
i = 1 和 j = 3 :nums[1] 的第一个数字是 5 ,nums[3] 的最后一个数字是 454 互质,因此 gcd(5,4) == 1 。
i = 2 和 j = 3 :nums[2] 的第一个数字是 1 ,nums[3] 的最后一个数字是 414 互质,因此 gcd(1,4) == 1 。
因此,返回 5 。
示例 2:

输入:nums = [11,21,12]
输出:2
解释:共有 2 组美丽下标对:
i = 0 和 j = 1 :nums[0] 的第一个数字是 1 ,nums[1] 的最后一个数字是 1gcd(1,1) == 1 。
i = 0 和 j = 2 :nums[0] 的第一个数字是 1 ,nums[2] 的最后一个数字是 2gcd(1,2) == 1 。
因此,返回 2 。
提示:

2 <= nums.length <= 100
1 <= nums[i] <= 9999
nums[i] % 10 != 0
Related Topics
数组
哈希表
数学
计数
数论

思路分析1

首先想到的就是使用双循环的暴力解法,使用双循环逐个遍历数组,找到所有的美丽下标对。这里判断两个数是不是互质的函数写法是固定常用的GCD函数,如果返回值为1则代表两个数互质。

代码实现1

class Solution {
    public int countBeautifulPairs(int[] nums) {
        int result = 0;

        for (int i = 0; i < nums.length; i++){
            for (int j = i + 1;j < nums.length; j++){
                int a = nums[i];
                while (a >= 10){
                    a = a / 10;
                }
                int b = nums[j] % 10;
                if (gcd(a, b)==1){
                    result++;
                }
            }
        }
        return result;
    }

    public int gcd(int a, int b){
        while (b != 0){
            int temp = b;
            b = a % b;
            a = temp;
        }

        return a;
    }
}

思路分析2

上面的方法就是简答粗暴地遍历,我就思考有没有可能优化一点速度,这里我可以选择把相同数字出现的次数记录下来,那么下面只要出现了互质的数字直接就增加对应的次数。比如说,前三个数字的第一位都是‘3’,那么后面只要有一个数字的最后一位是与‘3’互质的,最后的结果就可以直接增加3。这样就减少了一定的重复工作。

代码实现2

class Solution {
    // 求两个数的最大公约数
    private int gcd(int a, int b) {
        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
        return a;
    }

    public int countBeautifulPairs(int[] nums) {
        int[] cnt = new int[10]; // 已遍历 第一位数的计数
        int ans = 0;

        for (int x : nums) {
            // 获取第一个数字
            int first = 0;
            for (int tx = x; tx != 0; tx /= 10) {
                first = tx % 10;
            }

            // 获取最后一个数字
            int last = x % 10;
            
            // 遍历找之前是否有互质的
            for (int fir = 1; fir <= 9; fir++) {
                if (cnt[fir] != 0 && gcd(fir, last) == 1) {
                    ans += cnt[fir];
                }
            }

            cnt[first]++; // 维护计数器
        }

        return ans;
    }
}

在这段代码中:
1.gcd 方法用于计算两个数的最大公约数。
2.countBeautifulPairs 方法计算美丽下标对的总数目。它遍历数组 nums,提取每个数的第一个和最后一个数字,并检查是否存在之前遍历过的数字与当前数的最后一个数字互质。
3.维护一个计数器 cnt,记录每个数字的第一个数字出现的次数。通过遍历 cnt,检查是否存在互质的数字对。

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

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

相关文章

档案数字化建设要点

目前&#xff0c;档案信息数字化的现状是档案标准化、规范化滞后和应用软件多乱&#xff0c;这些都严重影响了系统整体水平的提高。档案信息自动化的内涵包括档案工作的各个方面和各个环节&#xff0c;其中首要的是档案业务要规范&#xff0c;档案标准要建立健全和真正实施。档…

【Python高级编程】Pickle实现AI算法训练的权重数据的保存

任务描述 代码实现 import pickle import time import os import numpy as np# 模拟耗时的权重计算过程 def calculate_weights():print("开始计算权重...")time.sleep(5) # 模拟耗时操作&#xff0c;暂停5秒以模拟计算过程weights np.random.rand(10, 10) # 随机…

RealityCheck™电机监测和预测性维护模型

RealityCheck™电机 一个附加的软件工具箱&#xff0c;可实现条件监测和预测性维护功能&#xff0c;而无需依赖额外的传感器。相反&#xff0c;它使用来自电机控制过程的电子信息作为振动和其他传感器的代理。凭借其先进的信号处理和机器学习(ML)模型&#xff0c;RealityCheck …

[AIGC] 使用Google的Guava库中的Lists工具类:常见用法详解

在Java程序设计中&#xff0c;集合是我们最常用的数据结构之一。为了方便我们操作集合&#xff0c;Google的Guava库提供了一个名为Lists的工具类&#xff0c;它封装了许多用于操作List对象的实用方法。在本文中&#xff0c;我们将详细介绍其常见的用法&#xff0c;以帮助您更好…

S级猫主食冻干测评出来了:希喂、K9、朗诺实测分享

对于许多宠物主人来说&#xff0c;一到挑选主食冻干就头疼。尽管主食冻干为猫咪带来的益处远超过普通猫粮&#xff0c;但其价格也相对较高。因此&#xff0c;许多宠物主人担心高价购买的主食冻干营养价值并不高。实际上&#xff0c;除了营养&#xff0c;安全性和配方也是选购时…

【课程系列04】某客时间AI大模型应用开发实战营

网盘链接 https://pan.baidu.com/s/1blR1eIMDIIp6AbxU4YaK9w 课程收获 "AI大模型应用开发实战营"是一个为期八周的在线课程&#xff0c;旨在教授学员如何开发和应用AI大模型。课程内容从基础理论到实际应用&#xff0c;逐步深入&#xff0c;覆盖了以下要点&#x…

推荐一个大佬们都在用的IDE主题-Dracula Theme

Dracula主题 对于颜色的主题&#xff0c;每个人的喜欢都有所区别&#xff0c;我喜欢Dracula主题&#xff0c;基本IDE编辑器能配置的都会配置这个主题颜色。然后偶然有一天我发现这个网站&#xff1a;https://draculatheme.com/。才发现Dracula不再仅仅只是个主题了&#xff0c…

有了它,再也不用为客户管理而烦恼

在竞争激烈的市场环境中&#xff0c;有效的客户关系管理&#xff08;CRM&#xff09;系统是企业获取商机、提高成单效率的关键。搭贝CRM管理系统是基于市场业务需求量身定制的&#xff0c;通过记录客户360度画像和跟进信息&#xff0c;实现客户管理的精细化和高效流转。 &#…

Linux:文件描述符

文件描述符实际上就是一个小整数 0 & 1 & 2 Linux进程默认情况下会有3个缺省打开的文件描述符&#xff0c;分别是标准输入0&#xff0c; 标准输出1&#xff0c; 标准错误2. 0,1,2对应的物理设备一般是&#xff1a;键盘&#xff0c;显示器&#xff0c;显示器 所以输入输…

为电脑小白推荐的5款实用工具软件

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.磁盘空间分析——TreeSize Free ​ TreeSize Free是一款免费的磁盘空间分析工具&#xff0c;能够扫描…

深度学习模型训练中 学习率参数 设置大小问题及设置合适值

&#x1f4aa; 专业从事且热爱图像处理&#xff0c;图像处理专栏更新如下&#x1f447;&#xff1a; &#x1f4dd;《图像去噪》 &#x1f4dd;《超分辨率重建》 &#x1f4dd;《语义分割》 &#x1f4dd;《风格迁移》 &#x1f4dd;《目标检测》 &#x1f4dd;《暗光增强》 &a…

对30年国债利率破2.5%的复盘反思

短期看&#xff0c;以月为维度&#xff0c;长端和超长端利率依然具有较强的向下突破的惯性&#xff1b;中期看&#xff0c;以季为维度&#xff0c;长端依然面临向下赔率不足的约束&#xff0c;但调整需要多重利空共振的契机。 短期看多&#xff0c;逢高配置”的四点逻辑 逻辑一…

SpringBoot:SpringBoot集成Druid监控慢SQL

一、前言 数据库连接池是一个至关重要的组成部分&#xff0c;一个优秀的数据库连接池可以显著提高应用程序的性能和可伸缩性。常见的连接池&#xff1a;Druid、HikariCP、C3P0、DBCP等等&#xff0c;不过目前大部分都是使用Druid或者SpringBoot默认的HikariCP&#xff01; 本文…

计算机网络 交换机的基本配置

一、理论知识 1.三种模式&#xff1a; ①用户模式&#xff1a;当登录路由器后&#xff0c;系统自动进入用户EXEC命令模式。 例如&#xff1a; Router> 在用户模式状态下&#xff0c;用户只能查看路由器的连接状态和基本信息&#xff0c;访问其他网络和主机&#xff0c…

lombok常用注解使用与原理

什么是lombok 一个优秀的Java代码库&#xff0c;简化了Java的编码&#xff0c;为Java代码的精简提供了一种方式 使用方法&#xff1a;pom文件中引入依赖 <!--scope&#xff1a;provided&#xff0c;只在编译阶段生效&#xff0c;不需要打入包中--> <dependency>…

AI 编译器技术分享会:上海交大/中科院计算所/微软亚研/智源,他们来了!

4 场 Meetup、3 个城市、19 位嘉宾、1k 行业从业者、累计 100w 曝光&#xff0c; 2023 年 AI 编译器社区小小刷新了一下存在感&#xff0c;我们在非常细分的领域里找到了最为垂直的开发者和工程师&#xff0c;从 0 到 1 建立起一个个小据点&#xff0c;搭建交流平台、促成企内合…

求最小生成树的新算法

不管 prim 算法还是 kruskal 算法都基于 “当前可见最短边” 作贪心策略&#xff0c;但这并不适合分布式并行操作&#xff0c;比方说所有节点一起构建最小生成树&#xff0c;这些算法都显得同步开销过大&#xff0c;甚至导出错误的结果。 最近研究并构建最大流多路径传输协议的…

韩顺平0基础学Java——第27天

p548-568 明天开始坦克大战 Entry 昨天没搞明白的Map、Entry、EntrySet&#xff1a;//GPT教的 Map 和 Entry 的关系 1.Map 接口&#xff1a;它定义了一些方法来操作键值对集合。常用的实现类有 HashMap、TreeMap 等。 2. Entry接口&#xff1a;Entry 是 Map 接口的一个嵌…

【高等数学】傅里叶级数

最近刷了会抖音&#xff0c;看到一个非常有趣的现象&#xff1a;傅里叶级数&#xff0c;今天挑了几个视频来供大家学习。 1.傅里叶级数概念 【小崔说数】傅里叶级数专题https://www.bilibili.com/video/BV1Uq4y1q7xk?t117.4 2.傅里叶级数动画 【谜之舒适】12分钟的傅立叶级…

编译原理:语法分析(语法制导翻译)、语义分析(类型检查、中间代码生成)

编译器在做语法分析的过程中&#xff0c;除了回答程序代码的语法是否合法&#xff08;LL,LR能否接收&#xff09;外&#xff0c;还需要完成后续的工作&#xff08;包括构建语法树、类型检查、中间代码生成、目标代码生成&#xff09;&#xff0c;这些后续工作一般都可以通过语法…