当前位置: 首页 > news >正文

聊城东昌府区建设路小学网站长沙制作手机网站的公司

聊城东昌府区建设路小学网站,长沙制作手机网站的公司,百度免费网站空间,青岛商城网站建设设计题目 题目链接 LeetCode2748.美丽下标对的数目 题目描述 给你一个下标从 0 开始的整数数组 nums 。 如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c; 如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c; 则认为 nums[i] 和 nums…

题目

题目链接

LeetCode2748.美丽下标对的数目

题目描述

给你一个下标从 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] 的最后一个数字是 5 。2 和 5 互质,因此 gcd(2,5) == 1 。
i = 0 和 j = 2 :nums[0] 的第一个数字是 2 ,nums[2] 的最后一个数字是 1 。2 和 1 互质,因此 gcd(2,1) == 1 。
i = 1 和 j = 2 :nums[1] 的第一个数字是 5 ,nums[2] 的最后一个数字是 1 。5 和 1 互质,因此 gcd(5,1) == 1 。
i = 1 和 j = 3 :nums[1] 的第一个数字是 5 ,nums[3] 的最后一个数字是 4 。5 和 4 互质,因此 gcd(5,4) == 1 。
i = 2 和 j = 3 :nums[2] 的第一个数字是 1 ,nums[3] 的最后一个数字是 4 。1 和 4 互质,因此 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

题目解析

Q:什么是美丽下标对?(看完题目描述之后,背出来)
A:假如有一个数组nums,其中有两个下标i、j,满足0<=i<j<nums.length。如果nums[i]的第一个数和nums[j]的最后一个数字互质,则这是一对美丽下标对。关键在于,取得是nums[i]的第一个数字,以及nums[j]的最后一个数字。

Q:如何判断两个数字是否互质?(概念和算法)
A1:互质:两个数没有比1大的公约数,就是互质。
A2:gcd:辗转相除法。这里用文字描述一下先,毕竟能用大白话说出来,写成代码也不难。传进来两个数a和b,把b变成a%b,a变成原来的b,然后判断b是不是0。如果b是0,则返回a的值。a就是最大公约数。But!怎么用gcd判断俩数是否互质呢?如果两个数互质,那么gcd的返回结果就是1,调用完gcd检查一下就行了。

Q:我已经知道了美丽下标对的定义和判断两个数是否互质的方法,那么接下来如何编写Solution。
A:理解清输入、输出的要求,再想中间的运算逻辑。

  1. 输入:一个整型数组。一定有两个或两个以上的元素
    在这里插入图片描述
  2. 输出:返回这个数组中美丽下标对的数目。
  3. 运算:这不就是让咱遍历数组吗?因为题目已经要求只有当i<j的时候,才算数了。所以只需要从前往后遍历多遍数组,然后每个对子都判断一次就好了。

Java版Solution

class Solution {public int countBeautifulPairs(int[] nums) {int res=0;int[] dp = new int[10];for(int x:nums){for(int j=1;j<10;j++){if(gcd(x%10,j)==1){res+=dp[j];}}while(x>=10)x/=10;dp[x]++;}return res;}private int gcd(int a,int b){return b==0?a:gcd(b,a%b);}
}

总结

出问题的地方

  • 下标没理清楚
    • 内层循环每次都应该遍历到最后,应该是<nums.length,起始位置应该是i+1
    • 外层循环只需要遍历到nums.length-1。
  • 题目定义没理清楚
    • 题目都给了第二个例子了,我没看见,真的是。

优化思路

抄袭的官方题解
在这里插入图片描述

  1. 只用遍历一次nums数组
  2. 对于第一个数,只需要保存下来它的第一个数字,存在咱定义的哈希表里。哈希表在这个题里,下标和元素分别表示,(下标)开头的数字有(元素)个。
  3. 在之后遍历的时候,都是先取这个数的最后一个数字,然后拿它和0到9进行gcd,如果结果为1,就让结果加加,加多少?加上哈希表里这个数字对应的元素的值。
  4. 然后取这个数字的第一个数字,同样保存在哈希表中。(只需要让对应下标的元素加加就行了)
http://www.yayakq.cn/news/469411/

相关文章:

  • 网站电脑端和手机端资讯类网站怎么做
  • 有网页源码怎么做网站学习做网页的网站
  • 网站设计兼容模式wordpress媒体库图片不显示
  • 一站式发稿平台免费h5响应式网站搭建
  • 做资源网站自己可以开发一个软件吗
  • 重庆建设摩托车官方网站素材网站的下载服务器怎么做
  • 重庆建设招标网站广元市建设局网站首页
  • 大港油田建设官方网站视频剪辑培训班学费一般多少
  • 做八年级题目的网站河源盛世网站建设
  • app定制开发网站制作没后台的网站怎么做优化
  • 网站设计任务书范文废旧电脑做网站服务器
  • 虚拟技术对网站建设维护的影响国内最好的分销平台
  • 山西大同专业网站建设价格做网站从什么做起
  • 有自己域名主机怎么做网站北京网站域名备案
  • 青岛网站制作百家号网站开发是怎么样的
  • 淄博网站制作服务推广2323wan网页游戏
  • 网站开发掌握哪种语言赣州章贡区最新招聘信息
  • 上海美容网站建设wordpress页面模板对应
  • 网站制网站制作公司超级seo工具
  • 莆田做网站做书评的网站有哪些
  • 文化建设意义湛江网站seo
  • 深圳建模板网站桂林市是几线城市
  • 网站建设首选玖艺建站信得过wordpress 全站404
  • 天津哪里有做网站的做服装搭配图的网站
  • 购物网站排名前十名手机上可以做网站吗
  • 做网站的思想体会销售app软件大概需要多少钱
  • 沧州网站群网站seo诊断报告例子
  • 建站公司 转型经验兰州市做网站的
  • 网站建设企业战略到哪里建网站
  • 建设企业网站公司价格买房网站排名