码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 每日一题 2748. 美丽下标对的数目


    Hey编程小伙伴们👋,今天我要带大家一起解锁力扣上的一道有趣题目—— 美丽下标对的数目 - 力扣 (LeetCode)。这不仅是一次编程挑战,更是一次深入理解欧几里得算法判断互质的绝佳机会!🎉

    问题简介

    题目要求我们给定一个整数数组 nums,找出所有满足特定条件的下标对。这里的特定条件是:如果 nums[i] 的第一个数字和 nums[j] 的最后一个数字互质,那么我们称这对下标为“美丽下标对”。🌟

    互质:数学中的“独行侠”🦸‍♂️

    在数学的世界里,如果两个数的最大公约数(GCD)是1,我们称这两个数为互质的。换句话说,它们之间没有其他公共的“朋友”来整除它们,1是它们唯一的公约数。🕵️‍♂️

    欧几里得算法:追溯GCD的足迹🔍

    欧几里得算法是一种非常高效的计算两个正整数最大公约数的方法。它的基本思想是:两个正整数a和b(假设a>b)的最大公约数与b和a%b(a除以b的余数)的最大公约数相同。🔄

    互质的判断逻辑🤔

    这里我们深入探讨一下,为什么通过欧几里得算法可以判断两个数是否互质。互质的定义是两个数的最大公约数为1。欧几里得算法的核心在于它递归地将问题规模缩小,直到无法再分。当较小的数变为1时,如果此时较大的数也是1,那么这两个数就是互质的。🔑

    算法步骤:
    1. 开始:我们有两个整数a和b,其中a是较大的数。
    2. 计算余数:我们计算a除以b的余数,记为r(即 a % b)。
    3. 递归替换:我们将b的值赋给a,将r的值赋给b,然后重复这个过程。
    4. 结束条件:当b变为0时,a的值就是我们要找的最大公约数。🏁
    举个例子:

    假设我们要判断35和18是否互质:

    • 我们开始计算35除以18的余数,得到17。🔢
    • 然后我们用18除以17的余数,得到1。🕒
    • 最后,我们用17除以1,余数为0,此时18(原来的b)是1,这意味着35和18的最大公约数是1,所以它们是互质的。🎊

    通过这种方式,欧几里得算法不仅帮助我们找到了两个数的最大公约数,也让我们能够判断这两个数是否互质。这是一种既简洁又高效的方法,非常适合在编程中实现。👩‍💻

    代码实现(scala)

    object Solution {
        def countBeautifulPairs(nums: Array[Int]): Int = {
            val pairs = for {
                i <- nums.indices
                j <- (i + 1) until nums.length
            } yield (i, j)
    
            pairs.filter { case (i, j) =>
                val (firstDigit, secondDigit) = (nums(i).toString.charAt(0).asDigit, nums(j) % 10)
                gcd(firstDigit, secondDigit) == 1
            }.length
        }
            
        def gcd(a: Int, b: Int): Int = if (b == 0) a else gcd(b, a % b)
    
    }
    

    #算法 #力扣 #质数 #编程技巧

  • 相关阅读:
    Python 实践
    学完Python,不做程序员,只接兼职,哎,就是玩儿
    微服务 第二章 CountDownLatch和Semaphone的应用
    从零开始实现lmax-Disruptor队列(二)多消费者、消费者组间消费依赖原理解析
    四川易点慧电子商务:抖音小店引领潮流,先进模式打造电商新标杆
    JAVA集合,HashSet 自定义判重规则
    嵌入式开发:当用微控制器构建嵌入式GUI时,有哪些注意事项
    适合Python初学者阅读的Github开源代码
    jenkins+junit4+allure+selenium实现自动化测试与结果可视化
    .net餐厅管理系统数据层餐厅服务类添加订单、添加、删除收藏信息
  • 原文地址:https://blog.csdn.net/weixin_38643743/article/details/139815158
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号