美文网首页
【算法题】2748. 美丽下标对的数目

【算法题】2748. 美丽下标对的数目

作者: 程序员小2 | 来源:发表于2023-06-28 07:52 被阅读0次

题目:

给你一个下标从 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 和 k 最大公因数 。

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

提示:

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

java代码:

class Solution {
    public int countBeautifulPairs(int[] nums) {
        int ans = 0;
        var cnt = new int[10];
        for (int x : nums) {
            for (int y = 1; y < 10; y++)
                if (cnt[y] > 0 && gcd(x % 10, y) == 1)
                    ans += cnt[y];
            while (x >= 10) x /= 10; // 这里需要 O(log x) 的时间
            cnt[x]++; // 统计最高位的出现次数
        }
        return ans;
    }

    private int gcd(int a, int b) {
        while (a != 0) {
            int tmp = a;
            a = b % a;
            b = tmp;
        }
        return b;
    }
}

相关文章

  • 【算法题】19.好数对的数目

    题目 给你一个整数数组 nums 。 如果一组数字 满足 nums[i] == nums[j] 且 i <...

  • 字符串

    string 切割substr(开始切割下标,切割数目)snbstring(开始切割下标,结束切割时后面的下标)s...

  • KNN算法进行字母识别、决策树进行页面块分类

    第一题:采用Knn算法分析letter Recognition Datasets数据集,要求测试集数目至少为50个...

  • 2183. 统计可以被 K 整除的下标对数目

    2183. 统计可以被 K 整除的下标对数目[https://leetcode-cn.com/problems/c...

  • 排列组合算法

    组合算法 非递归算法 组合算法的思路是开一个数组,其下标表示1到m个数,数组元素的值为1表示其下标代表的数被选中,...

  • substr、substring、slice三者的区别

    定义 substr() 方法可在字符串中抽取从 start 下标开始的指定数目的字符。substring() 方法...

  • 负载均衡的多种算法总结

    随机算法 先将服务器放进数组或者列表当中,通过JDK的随机算法,获取一个在数组有效范围内的下标,根据这个随机下标访...

  • KMP算法

    KMP算法 与BF算法相比,KMP的改进之处在于,当主串当前指针(下标)字符与模式串当前指针(下标)字符不相等时,...

  • Android面经| 算法题解

    整理了校招面试算法题,部分《剑指offer》算法题,以及LeetCode算法题,本博文中算法题均使用Java实现校...

  • 数据结构

    算法 二分查找:已经排序的数组找值。1)记录数组左下标和右下标2)找出mid下标对应的数据,比较target与mi...

网友评论

      本文标题:【算法题】2748. 美丽下标对的数目

      本文链接:https://www.haomeiwen.com/subject/kukoydtx.html