力扣每日一题 6/20 数学+数组

  • 博客主页:誓则盟约
  • 系列专栏:IT竞赛 专栏
  • 关注博主,后期持续更新系列文章
  • 如果有错误感谢请大家批评指出,及时修改
  • 感谢大家点赞👍收藏⭐评论✍ 

2748.美丽下标对的数目【简单

题目:

给你一个下标从 0 开始的整数数组 nums 。如果下标对 ij 满足 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] 的最后一个数字是 5 。2 和 5 互质,因此 gcd(2,5) == 1 。
i = 0 和 j = 2 :nums[0] 的第一个数字是 2 ,nums[2] 的最后一个数字是 1 。2 和 5 互质,因此 gcd(2,1) == 1 。
i = 1 和 j = 2 :nums[1] 的第一个数字是 5 ,nums[2] 的最后一个数字是 1 。2 和 5 互质,因此 gcd(5,1) == 1 。
i = 1 和 j = 3 :nums[1] 的第一个数字是 5 ,nums[3] 的最后一个数字是 4 。2 和 5 互质,因此 gcd(5,4) == 1 。
i = 2 和 j = 3 :nums[2] 的第一个数字是 1 ,nums[3] 的最后一个数字是 4 。2 和 5 互质,因此 gcd(1,4) == 1 。
因此,返回 5 。

示例 2:

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

提示:

  • 2 <= nums.length <= 100
  • 1 <= nums[i] <= 9999
  • nums[i] % 10 != 0

分析问题:

        读完题,第一思路就是模拟题目,跟着题目的要求遍历nums列表,然后符合题意则计数。但这里需要注意的是,j>i 并且只取nums[i]的第一位数字以及nums[j]的最后一位数字,什么意思呢?

        也就是说这里我们要进行一个字符串切割,并且后续我们比对的时候也只需要比对10以下的数字是否互质即可,那么这里我们就可以用简单的方法,没有必要全部去比对,只需要知道nums[i]的第一位数字和nums[j]的最后一位数字是什么我们就能直接得到是否互质这个答案,可以大大减小我们的时间复杂度。接下来请看代码实现以及两者之间的复杂度比对。


代码实现:

优化前:
class Solution:def countBeautifulPairs(self, nums: List[int]) -> int:import mathdef pan(m,n):if math.gcd(m,n)==1: return Truereturn Falsev=0for i in range(len(nums)-1):for j in range(i+1,len(nums)):if pan(int(str(nums[i])[0]),int(str(nums[j])[-1])): v+=1return v

 

优化后:
class Solution:def countBeautifulPairs(self, nums: List[int]) -> int:factor = {1: [1, 2, 3, 4, 5, 6, 7, 8, 9],2: [1, 3, 5, 7, 9],3: [1, 2, 4, 5, 7, 8],4: [1, 3, 5, 7, 9],5: [1, 2, 3, 4, 6, 7, 8, 9],6: [1, 5, 7],7: [1, 2, 3, 4, 5, 6, 8, 9],8: [1, 3, 5, 7, 9],9: [1, 2, 4, 5, 7, 8]}last = [0] * 10for num in nums:last[num % 10] += 1count = 0for i, num in enumerate(nums):last[num % 10] -= 1while num // 10 > 0:num //= 10for gcd_num in factor[num]:count += last[gcd_num]return count

 通过对比两者的提交耗时,可以直观的发现优化后的复杂度有大大降低。


总结:

优化后代码详解
  1. factor 字典:定义了每个数字的因数列表。例如,数字 1 的因数是 1、2、3、4、5、6、7、8、9,数字 2 的因数是 1、3、5、7、9,以此类推。
  2. last 列表:用于记录每个数字在列表中出现的次数。初始时,每个数字的出现次数都为 0。
  3. 遍历列表 nums:对于每个数字 num,将其在 last 列表中的出现次数加 1。
  4. 再次遍历列表 nums:对于每个数字 num,将其在 last 列表中的出现次数减 1。然后,通过不断除以 10,将数字 num 的首位数字提取出来。
  5. 对于提取出来的首位数字,遍历其因数列表 factor[num]。对于每个因数 gcd_num,将其在 last 列表中的出现次数加到 count 变量中。
  6. 最后,返回 count 变量,即美丽数对的数量。
主要考察了以下几个方面:

  1. 对字典和列表的使用:通过 factor 字典存储数字的因数列表,通过 last 列表记录数字的出现次数。
  2. 循环和条件判断:使用两个嵌套的循环遍历列表 nums,并根据条件进行计算。
  3. 数学运算:涉及到除法和取余运算,用于提取数字的首位数字。
  4. 问题解决能力:通过分析问题,设计合适的数据结构和算法来解决美丽数对的计算问题。
刷过这道题可以学到以下几点:

  1. 如何使用字典和列表来存储和操作数据。
  2. 如何使用循环和条件判断来解决问题。
  3. 如何进行数学运算和处理数字。
  4. 如何分析问题并设计有效的算法。
  5. 对代码的优化和改进,例如减少重复计算和提高代码的可读性。

“别人总是以为你什么都有,但你只剩自己了。”——意难藏—— 

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

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

相关文章

Nginx Rewrite技术

一&#xff1a;理解地址重写 与 地址转发的含义。二&#xff1a;理解 Rewrite指令 使用三&#xff1a;理解if指令四&#xff1a;理解防盗链及nginx配置 简介&#xff1a;Rewrite是Nginx服务器提供的一个重要的功能&#xff0c;它可以实现URL重定向功能。 一&#xff1a;理解地…

NodeJs 连接本地 mySql 数据库获取数据

写在前面 今天把 nodejs 连接本地数据库的坑简单的踩一下&#xff0c;为后续写接口做个铺垫 安装 mySql &#xff08;mac举例子&#xff09; 安装地址 安装完成大概这个样子&#xff0c;起动起来就行 安装本地数据库连接工具&#xff08;navicat举例子&#xff09; 安装地…

EXCEL数据导入HIVE

引言 本文将论述如何将Windows本地的excel表数据&#xff0c;导入到虚拟机Linux系统中的Hadoop生态中的Hive数据仓库中。 实验准备 DBeaver Hive3.1&#xff08;Hadoop3.1&#xff09; excel数据表 实验步骤 一、首先打开虚拟机&#xff0c;启动Hadoop&#xff0c;启动h…

Avalonia for VSCode

1、在VSCode中编辑AvaloniaUI界面&#xff0c;在VSCode中搜索Avalonia&#xff0c;并安装。如下图&#xff0c;可以发现Avalonia for VSCode还是预览版。 2、 创建一个Avalonia 项目。 选择项目类型 输入项目名称 选择项目所在文件夹 打开项目 3、项目架构如下图。 4、builde…

项目六 OpenStack虚拟机实例管理

任务一 理解OpenStack计算服务 1.1 •什么是Nova • Nova是OpenStack中的计算服务项目 &#xff0c;计算虚拟机实例生命周期的所有活动都由 Nova 管理 。 • Nova 提供统一的计算资源 服务。 • Nova 需要下列 OpenStack 服务的 支持。 Keystone &#xff1a;为所有的 OpenSt…

django学习入门系列之第二点《浏览器能识别的标签3》

文章目录 列表表格往期回顾 列表 无序列表 <!-- <ul </ul> 无序列表 --> <ul><li> 内容1 </li><li> 内容2 </li><li> 内容3 </li><li> 内容4 </li> </ul>有序列表 <!-- <ol> &…

第6章 设备驱动程序(6)

目录 6.7 总线系统 6.7.2 PCI总线 6.7.3 USB 6.8 小结 本专栏文章将有70篇左右&#xff0c;欢迎关注&#xff0c;查看后续文章。 6.7 总线系统 6.7.2 PCI总线 PCI由Intel开发&#xff0c;用于替代ISA。 PCI已过时&#xff0c;目前采用PCIe。 PCI特点&#xff1a; 高带宽…

停车场防逃费设备有哪些,捷曜超眸相机怎么样,有哪些功能?

在当今快速发展的城市交通环境中&#xff0c;车场管理面临着诸多挑战&#xff0c;其中防逃费现象尤为突出。频繁的逃费行为不仅给车场运营带来了经济损失&#xff0c;也严重影响了停车场的正常秩序。对于车场防逃费方案中&#xff0c;超眸相机&#xff0c;以其尖端的高清成像技…

C++学习(23)

#学习自用# union 共用体和结构体相似&#xff0c;但是共用体一次只能占用一个成员的内存&#xff0c;所有成员共用同一地址。 #include<iostream> using namespace std; union A {int int_val;float float_val; }a; int main() {a.float_val 2.0f;cout << a.f…

浏览器加了token的header导致部分网页打不开

因为测试加了个token&#xff0c;忘记去掉&#xff0c;导致一些系统进不去&#xff0c;只能用无痕浏览器打开&#xff0c;后来发现是因为token的原因

零散的面试题

★1.java常见的引用类型 强:普通的变量引用 软:内存够时,GC不会主动删除,内存不够时,GC会删除 弱:一旦执行GC就会被删除 虚:用了感觉没用 ★2.JDK1.8新特性 lambda表达式(极大简化了匿名内部类的创建&#xff0c;促进函数式编程的风格)函数式接口(只能有一个抽象方法的接口 )日…

Nexus安卓木马分析报告

概述 2023年3月21日晚上&#xff0c;链安与中睿天下联合研发的监控系统检测到一种新型安卓木马。在经过睿士沙箱系统捕获样本之后&#xff0c;发现该安卓木马极有可能是原安卓网银盗号木马SOVA的变种。与此同时&#xff0c;意大利安全公司Cleafy发布了一篇题为《Nexus&#xf…

一款Wordpress网站导航主题,带昼夜切换功能

Wordpress网站导航主题&#xff0c;带昼夜切换功能。 基于wordpress&#xff0c;部署和使用都比较方便。 界面比较简洁大方。后台管理功能也比较全面&#xff0c;值得一试。 这款主题界面、功能都非常简洁。 作者把这款定位为简约导航主题&#xff0c;所以这款wordpress导航…

飞书API 2-1:如何通过 API 创建文件夹?

本文探讨如何通过飞书的 API 来创建文件夹。通过 API 创建的文件夹&#xff0c;一般是放在共享空间&#xff0c;如果要放在个人空间&#xff0c;建议手动创建。 查看 API 文档 API 路径&#xff0c;可在飞书开放平台的服务端 API&#xff0c;依次查找云文档>云空间>文件…

MavenPlus插件的基础功能完善

本次更新主要是在初版的searchEverywhere的基础上增加了pom.xml文件编辑器&#xff0c;目前的界面布局如下&#xff0c;进行适当说明&#xff1a; 打开pom文件后&#xff0c;你会得到如上图所示的布局页面&#xff0c;数据会同步显示 如果有冲突信息&#xff0c;则会以红色显示…

【Android面试八股文】你刚刚提到了V2签名使用美团的Walle实现多渠道打包,那么你能讲一讲Android 签名的 v1、v2、v3、v4版本的区别吗?

文章目录 前言一、简介二、APK 签名方案 v1 (JAR签名)2.1. 签名过程2.2 验证过程2.3 详细例子2.4 优缺点2.5 美团基于V1版本的多渠道打包方案三、APK 签名方案 v23.1 为什么要设计APK 签名方案 v2 ?3.2 APK 签名方案 v2 : 签名前和签名后的 APK3.2.1 签名前和签名后的 APK3.2…

qmt量化交易策略小白学习笔记第40期【qmt编程之期货数据--如何获取合约基础信息】

qmt编程之获取期货数据 qmt更加详细的教程方法&#xff0c;会持续慢慢梳理。 也可找寻博主的历史文章&#xff0c;搜索关键词查看解决方案 &#xff01; 感谢关注&#xff0c;咨询免费开通量化回测与获取实盘权限&#xff0c;欢迎和博主联系&#xff01; 获取合约基础信息 …

Faiss:选择合适的索引Index

向量相似性搜索彻底改变了搜索领域。它允许我们高效地检索从GIF到文章等各种媒体&#xff0c;即使在处理十亿级别数据集时&#xff0c;也能在亚秒级时间内提供令人印象深刻的准确性。 然而&#xff0c;这种灵活性也带来了一个问题&#xff1a;如何知道哪种索引大小最适合我们的…

React+TS 从零开始教程(1)

源码链接&#xff1a;https://pan.quark.cn/s/c6fbc31dcb02 创建项目 直接通过以下命令&#xff0c;我们来创建一个reactts的项目。 npx create-react-app myapp --template typescript这样就创建好了,然后我们导入vscode. npx是npm里面的一个库&#xff0c;可以让你自动使用…

DAB-DETR

论文地址&#xff1a; https://arxiv.org/pdf/2201.12329 文章通过前人的经验得出&#xff0c;导致 DETR 训练速度慢的原因很大可能是因为 decoder 中 cross attention 这个模块&#xff0c;由上面的对比可以看出其与 self attention 的区别主要就在于query的不同。文章猜想两个…