2748. 美丽下标对的数目(Beautiful Pairs)
2748. 美丽下标对的数目(Beautiful Pairs)
题目分析
给定一个整数数组 nums,我们需要找出其中符合条件的“美丽下标对”。美丽下标对是指,数组中的某一对数字 nums[i] 和 nums[j](其中 0 ≤ i < j < nums.length)满足以下条件:
nums[i]的第一个数字(即nums[i]的最左边的数字)nums[j]的最后一个数字(即nums[j]的最右边的数字)
这两个数字互质,即 gcd(nums[i]的第一个数字, nums[j]的最后一个数字) == 1。如果满足这个条件,则认为这对下标是“美丽下标对”。
题解思路
暴力解法
在这个问题中,最简单的做法是使用双重循环来遍历所有可能的数字对,然后判断它们的第一个数字和最后一个数字是否互质。
步骤分析:
-
提取数字的第一个数字和最后一个数字:
- 对于
nums[i],我们可以通过字符串操作或者数学运算得到其第一个数字。 - 对于
nums[j],我们可以直接用nums[j] % 10来获取最后一个数字。
- 对于
-
计算
gcd:- 使用 Python 中的
math.gcd函数来计算两个数字的最大公约数。 - 如果
gcd的结果是 1,则认为这对数字互质。
- 使用 Python 中的
-
统计美丽下标对:
- 对于每一对
(i, j),如果它们满足互质的条件,增加计数器。
- 对于每一对
代码实现
Python 代码
from math import gcdclass Solution:def countBeautifulPairs(self, nums: List[int]) -> int:n, res = len(nums), 0for i in range(n):for j in range(i + 1, n):# 提取第一个数字和最后一个数字a = int(str(nums[i])[0]) # nums[i] 的第一个数字b = nums[j] % 10 # nums[j] 的最后一个数字# 判断是否互质if gcd(a, b) == 1:res += 1return res
C++ 代码
#include <vector>
#include <numeric> // gcd
using namespace std;class Solution {
public:int countBeautifulPairs(vector<int>& nums) {int res = 0;for (int i = 0; i < nums.size() - 1; i++) {for (int j = i + 1; j < nums.size(); j++) {int a = nums[i], b = nums[j] % 10;// 提取 nums[i] 的第一个数字while (a >= 10) {a /= 10;}// 判断是否互质if (gcd(a, b) == 1) {res++;}}}return res;}
};
代码优化与分析
-
暴力解法的时间复杂度:
- 外层循环遍历所有的
i,内层循环遍历所有的j,因此总共有O(n^2)次操作。对于n <= 100(题目限制),这样的时间复杂度是可以接受的。 - 提取数字的第一个数字和最后一个数字的操作是常数时间
O(1),所以整体时间复杂度为O(n^2)。
- 外层循环遍历所有的
-
优化点:
- 暴力解法已经是最直观的解决方案,但由于题目中数组的长度最大为
100,在这个范围内时间复杂度O(n^2)是能够承受的。因此,当前的暴力解法对于本题来说足够高效。 - 如果数据规模更大,可能需要考虑其他优化方法,比如使用哈希表等数据结构来减少重复计算,但在这里并不需要。
- 暴力解法已经是最直观的解决方案,但由于题目中数组的长度最大为
示例解析
示例 1
输入:
nums = [2, 5, 1, 4]
步骤:
(nums[0] = 2, nums[1] = 5),gcd(2, 5) = 1,符合条件。(nums[0] = 2, nums[2] = 1),gcd(2, 1) = 1,符合条件。(nums[0] = 2, nums[3] = 4),gcd(2, 4) = 2,不符合条件。(nums[1] = 5, nums[2] = 1),gcd(5, 1) = 1,符合条件。(nums[1] = 5, nums[3] = 4),gcd(5, 4) = 1,符合条件。(nums[2] = 1, nums[3] = 4),gcd(1, 4) = 1,符合条件。
输出:
5
示例 2
输入:
nums = [11, 21, 12]
步骤:
(nums[0] = 11, nums[1] = 21),gcd(1, 1) = 1,符合条件。(nums[0] = 11, nums[2] = 12),gcd(1, 2) = 1,符合条件。(nums[1] = 21, nums[2] = 12),gcd(2, 2) = 2,不符合条件。
输出:
2
结论
通过暴力解法,我们可以解决这类问题,尽管它的时间复杂度为 O(n^2),但在本题中,数据规模较小,暴力解法是完全可以接受的。此外,我们也展示了如何通过提取数字的第一个数字和最后一个数字,利用 gcd 判断是否满足美丽下标对的条件。
相关文章:
2748. 美丽下标对的数目(Beautiful Pairs)
2748. 美丽下标对的数目(Beautiful Pairs) 题目分析 给定一个整数数组 nums,我们需要找出其中符合条件的“美丽下标对”。美丽下标对是指,数组中的某一对数字 nums[i] 和 nums[j](其中 0 ≤ i < j < nums.leng…...
【unity游戏开发之InputSystem——06】PlayerInputManager组件实现本地多屏的游戏(基于unity6开发介绍)
文章目录 PlayerInputManager 简介1、PlayerInputManager 的作用2、主要功能一、PlayerInputManager组件参数1、Notification Behavior 通知行为2、Join Behavior:玩家加入的行为3、Player Prefab 玩家预制件4、Joining Enabled By Default 默认启用加入5、Limit Number Of Pl…...
算法刷题Day29:BM67 不同路径的数目(一)
题目链接 描述 解题思路: 二维dp数组初始化。 dp[i][0] 1, dp[0][j] 1 。因为到达第一行第一列的每个格子只能有一条路。状态转移 dp[i][j] dp[i-1][j] dp[i][j-1] 代码: class Solution: def uniquePaths(self , m: int, n: int) -> int: #…...
c语言网 1130数字母
原题 题目描述 输入一个字符串,数出其中的字母的个数. 输入格式 一个字符串,不包含空格(长度小于100) 输出格式 字符串中的字母的个数 样例输入 复制 124lfdk54AIEJ92854&%$GJ 样例输出 复制 10 #include<iostream> #include<cc…...
UG二开UF-常用方法
1,带有星号的TAG用法 UF_OPER_ask_cutter_group(tag_t oper,tag_t * group) 2.使用string头文件 #include <afxwin.h> tag_t dj NULL; UF_OPER_ask_cutter_group(objects[0],&dj);//查询指定操作所在的刀具组tag 2࿰…...
美国本科申请文书PS写作中的注意事项
在完成了introduction之后,便可进入到main body的写作之中。美国本科申请文书PS的写作不同于学术论文写作,要求你提出论点进行论证之类。PS更多的注重对你自己的经历或者motivation的介绍和描述。而这一描述过程只能通过对你自己的过往的经历的展现才能体…...
内存泄漏的通用排查方法
本文聊一聊如何系统性地分析查找内存泄漏的具体方法,但不会具体到哪种语言和具体业务代码逻辑中,而是会从 Linux 系统上通用的一些分析方法来入手。这样,不论你使用什么开发语言,不论你在开发什么,它总能给你提供一些帮…...
【Python】第五弹---深入理解函数:从基础到进阶的全面解析
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】【Python】 目录 1、函数 1.1、函数是什么 1.2、语法格式 1.3、函数参数 1.4、函数返回值 1.5、变量作用域 1.6、函数…...
读书笔记--分布式服务架构对比及优势
本篇是在上一篇的基础上,主要对共享服务平台建设所依赖的分布式服务架构进行学习,主要记录和思考如下,供大家学习参考。随着企业各业务数字化转型工作的推进,之前在传统的单一系统(或单体应用)模式中&#…...
关于WPF中ComboBox文本查询功能
一种方法是使用事件(包括MVVM的绑定) <ComboBox TextBoxBase.TextChanged"ComboBox_TextChanged" /> 然而运行时就会发现,这个事件在疯狂的触发,很频繁 在实际应用中,如果关联查询数据库࿰…...
解析“in the wild”——编程和生活中的俚语妙用
解析“in the wild”——编程和生活中的俚语妙用 看下面的技术文章中遇到 in the wild这个词,想要研究一下,遂产生此文。 Are there ever pointers to pointers to pointers? There is an old programming joke which says you can rate C programmers…...
蓝桥杯练习日常|c/c++竞赛常用库函数(下)
书接上回......蓝桥杯算法日常|c\c常用竞赛函数总结备用-CSDN博客 目录 书接上回......https://blog.csdn.net/weixin_47011416/article/details/145290017 1、二分查找 2、lower_bound uper_bound 3、memset() 函数原型 参数说明 返回值 常见用…...
Mybatis-plus缓存
mybatis-plus缓存 MyBatis-Plus 是一个 MyBatis 的增强工具,在 MyBatis 的基础上提供了更多的便利性和强大的功能,包括但不限于分页、条件构造器、通用 Mapper、代码生成器等。MyBatis-Plus 也内置了基础的缓存功能,但需要注意的是ÿ…...
LockSupport概述、阻塞方法park、唤醒方法unpark(thread)、解决的痛点、带来的面试题
目录 ①. 什么是LockSupport? ②. 阻塞方法 ③. 唤醒方法(注意这个permit最多只能为1) ④. LockSupport它的解决的痛点 ⑤. LockSupport 面试题目 ①. 什么是LockSupport? ①. 通过park()和unpark(thread)方法来实现阻塞和唤醒线程的操作 ②. LockSupport是一个线程阻塞…...
基于 WPF 平台使用纯 C# 实现动态处理 json 字符串
一、引言 在当今的软件开发领域,数据的交换与存储变得愈发频繁,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式,以其简洁、易读、便于解析和生成的特点,被广泛应用于各种应用程序中。在 W…...
Rust:Rhai脚本编程示例
当然,以下是一个简单的Rhai脚本编程示例,展示了如何在Rust中使用Rhai执行脚本。 首先,你需要确保你的Rust项目中包含了rhai库。你可以在你的Cargo.toml文件中添加以下依赖项: [dependencies] rhai "0.19" # 请检查最…...
skynet 源码阅读 -- 启动主流程
Skynet 启动主流程分析 Skynet 是一个轻量级、高并发的服务器框架。它在启动时会进行一系列初始化操作,并启动多个不同功能的线程(Monitor、Timer、Worker、Socket),从而实现消息分发、定时器、网络I/O等核心功能。本文主要从 ma…...
活动回顾和预告|微软开发者社区 Code Without Barriers 上海站首场活动成功举办!
Code Without Barriers 上海活动回顾 Code Without Barriers:AI & DATA 深入探索人工智能与数据如何变革行业 2025年1月16日,微软开发者社区 Code Without Barriers (CWB)携手 She Rewires 她原力在大中华区的首场活动“AI &…...
Workerman和Swoole有什么区别
Workerman和Swoole都是PHP的socket服务器框架,它们之间存在一些显著的区别,主要体现在以下几个方面: 一、实现语言与性能 Workerman:使用纯PHP实现。由于PHP本身的性能限制,Workerman在某些方面可能不如C语言实现的框…...
项目部署(springboot项目)
1、安装Nginx,并开启 2、前端项目打包:npm run build:prod--->dist 3、后端项目打包:install--->xxx.jar 4、开放需要的端口号:比如我的后端项目端口号为8282,则需要防火墙和服务器同时开发8282端口 5、将di…...
从0到1:C++ 开启游戏开发奇幻之旅(一)
目录 为什么选择 C 进行游戏开发 性能卓越 内存管理精细 跨平台兼容性强 搭建 C 游戏开发环境 集成开发环境(IDE) Visual Studio CLion 图形库 SDL(Simple DirectMedia Layer) SFML(Simple and Fast Multim…...
Python-列表
3.1 列表是什么 在Python中,列表是一种非常重要的数据结构,用于存储一系列有序的元素。列表中的每个元素都有一个索引,索引从0开始。列表可以包含任何类型的元素,包括其他列表。 # 创建一个列表my_list [1, 2, 3, four, 5.0]…...
下载Visual Studio Community 2019
官方链接如下:Visual Studio Community 2019下载链接 https://learn.microsoft.com/zh-cn/visualstudio/releases/2019/system-requirements#download 目前官方仅建议2022版,已经关闭vs2019等旧版本,哪天开放了,记得踢我一下。 …...
MongoDB平替数据库对比
背景 项目一直是与实时在线监测相关,特点数据量大,读写操作大,所以选用的是MongoDB。但按趋势来讲,需要有一款国产数据库可替代,实现信创要求。选型对比如下 1. IoTDB 这款是由清华大学主导的开源时序数据库&#x…...
c++ set/multiset 容器
1. set 基本概念 简介: 所有元素都会在插入时自动排序本质: set/multiset属于关联式容器,底层结构是用二叉树实现。set 和 multiset 区别: set容器不允许有重复的元素。 multiset允许有重复的元素。2. set 构造和赋值 构造&a…...
SCRM在企业私域流量与客户管理中的变革之路探索
内容概要 在当今数字化高速发展的时代,SCRM(社交客户关系管理)作为一种新的管理工具,正逐渐成为企业私域流量管理和客户关系维护的重要基石。它不仅仅是一种软件工具,更是一种整合客户数据和关系管理的全新思维方式。…...
爱的魔力转圈圈,基于carsim与simulink模拟仰望u8原地调头
仰望U8原地转向的示意图如下,不动方向盘的情况下,车可以自己转圈圈: 原理也很简单,仰望u8是四轮驱动,四个轮子都单独由四个轮边电机驱动。主要我们将左右的车轮轮速控制成左右两边轮速相同,但是方向相反&am…...
2025多目标优化创新路径汇总
多目标优化是当下非常热门且有前景的方向!作为AI领域的核心技术之一,其专注于解决多个相互冲突的目标的协同优化问题,核心理念是寻找一组“不完美但均衡”的“帕累托最优解”。在实际中,几乎处处都有它的身影。 但随着需求场景的…...
输出九九乘法表
# 题目:输出九九乘法表 #(1) for i in range(1,10): #行数,1到9for j in range(1,10): # 列数1到9resulti*jprint(f"{i}*{j}{result}",end"\t")print("\n")#(2) for i in range(1,10): #行数for j in range(1,i1): #列数1…...
基于微信小程序的新闻资讯系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
