首页 > 其他分享 >美丽下标对的数目(Lc2748)——计数

美丽下标对的数目(Lc2748)——计数

时间:2024-06-22 14:58:47浏览次数:25  
标签:10 cnt 下标 gcd nums Lc2748 计数 int ans

给你一个下标从 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 和 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

问题简要描述:返回美丽下标对的总数目 

细节阐述:

  1. 数组 cnt 来记录每个数字的第一个数字出现的次数

Java

class Solution {
    public int countBeautifulPairs(int[] nums) {
        int[] cnt = new int[10];
        int ans = 0;
        for (int x : nums) {
            for (int i = 0; i < 10; i++) {
                if (cnt[i] > 0 && gcd(i, x % 10) == 1) {
                    ans += cnt[i];
                }
            }
            while (x > 9) {
                x /= 10;
            }
            cnt[x]++;
        }
        return ans;
    }

    int gcd(int a, int b) {
        return b == 0 ? a : gcd(b, a % b);
    }
}

 Python3

class Solution:
    def countBeautifulPairs(self, nums: List[int]) -> int:
        cnt = [0] * 10
        ans = 0
        for x in nums:
            for i in range(10):
                if cnt[i] > 0 and gcd(i, x % 10) == 1:
                    ans += cnt[i]
            cnt[int(str(x)[0])] += 1
        return ans

 TypeScript

function countBeautifulPairs(nums: number[]): number {
    let cnt: number[] = Array(10).fill(0);
    let ans = 0;
    let gcd = (a: number, b: number): number => {
        return b == 0 ? a : gcd(b, a % b);
    };
    for (let x of nums) {
        for (let i = 0; i < 10; i++) {
            if (cnt[i] > 0 && gcd(i, x % 10) == 1) {
                ans += cnt[i];
            }
        }
        while (x > 9) {
            x = Math.floor(x / 10);
        }
        cnt[x]++;
    }
    return ans;
};

C++

class Solution {
public:
    int countBeautifulPairs(vector<int>& nums) {
		int cnt[10]{};
		int ans = 0;
		for (auto x : nums) {
			for (int i = 0; i < 10; i++){
				if (cnt[i] > 0 && gcd(i, x % 10) == 1) {
					ans += cnt[i];
				}
			}
			while (x > 9) {
				x /= 10;
			}
			cnt[x]++;
		}
		return ans;       
    }
};

Go

func countBeautifulPairs(nums []int) int {
	cnt := [10]int{}
	ans := 0
	for _, x := range nums {
		for i := 0; i < 10; i++ {
			if cnt[i] > 0 && gcd(i, x%10) == 1 {
				ans += cnt[i]
			}
		}
		for x > 9 {
			x /= 10
		}
		cnt[x]++
	}
	return ans
}

func gcd(a int, b int) int {
	if b == 0 {
		return a
	}
	return gcd(b, a%b)
}

标签:10,cnt,下标,gcd,nums,Lc2748,计数,int,ans
From: https://blog.csdn.net/qq_51626500/article/details/139882710

相关文章

  • vector中下标[]操作、迭代器与size()在使用中遇到的问题
    综述:1.今天学习vector的过程中遇到的一些问题记录下来,方便日后复习以及有相同疑惑的同学参考。2.主要关于下标与迭代器写入与读取元素。遇到的问题:代码如下:#include<iostream>#include<vector>usingnamespacestd;intmain(){ unsignedinti; vector<int>v1;......
  • fortran 数组下标从0还是1开始?
    Fortran语言中,数组的下标是从1开始的,这与许多其他编程语言(如C、Python或Java)将数组下标从0开始的习惯不同。这种从1开始的下标命名方式源于Fortran的历史,当时的记录卡片和编程语言是从1开始编号的。以下是一个Fortran代码示例,展示了如何声明一个数组并使用从1开始的下标:program......
  • 数位统计DP——AcWing 338. 计数问题
    数位统计DP定义数位DP(DigitalDP)是一种用于解决与数字的数位相关问题的动态规划算法。它将数字的每一位看作一个状态,通过转移状态来计算满足特定条件的数字个数或其他相关统计信息。运用情况统计满足特定条件的数字个数,例如在给定范围内有多少个数字满足某些数位特征。计算......
  • 2748. 美丽下标对的数目(Rust暴力枚举)
    题目给你一个下标从0开始的整数数组nums。如果下标对i、j满足0≤i<j<nums.length,如果nums[i]的第一个数字和nums[j]的最后一个数字互质,则认为nums[i]和nums[j]是一组美丽下标对。返回nums中美丽下标对的总数目。对于两个整数x和y,如......
  • 2024-06-19:用go语言,给定一个起始下标为 0 的整数数组 nums 和一个整数 k, 可以执行一个
    2024-06-19:用go语言,给定一个起始下标为0的整数数组nums和一个整数k,可以执行一个操作将相邻两个元素按位AND后替换为结果。要求在最多执行k次操作的情况下,计算数组中所有元素按位OR后的最小值。输入:nums=[3,5,3,2,7],k=2。输出:3。解释:执行以下操作:1.将nums[0]......
  • css如何动态累计数字?
    导读:css如何动态累计数字?用于章节目录的序列数生成,用css的计数器实现起来比js方式更简单!伪元素::after::before伪元素设置content可以在元素的首部和尾部添加内容,我们要在元素的首部添加序列号,所以要用到的是::before的content属性计数器counter-reset初始化或重置......
  • Verilog Hdl 计数器分频
    “分频”:是累加多个输入时钟信号clk_in的周期,最终使得,输出时钟信号clk_out的周期变大,频率变小。一、偶数分频例:计数器要实现6分频,输入时钟信号clk_in的6个周期要变成1个周期输出,输出6分频的输出时钟信号clk_out的半个周期占3个输入时钟信号clk_in的周期,相当于clk_out每次在3......
  • 计数类DP——AcWing 900. 整数划分
    计数类DP定义计数类DP主要是通过动态规划的方法来计算满足特定条件的方案数、组合数等数量相关的问题。运用情况需要计算不同排列、组合或情况的数量。问题具有明显的阶段性,且每个阶段的选择会对后续阶段产生影响。可以通过逐步构建较小规模问题的解来推导出大规模问题的解......
  • 代码随想录刷题记录(8)| 字符串(151.反转字符串里的单词,卡码网:55.右旋转字符串,28. 找出字
    目录(四)反转字符串里的单词1. 题目描述2.思路3.解题过程(1)使用额外空间存储(2)原地反转 (五)右旋转字符串1.题目描述2.思路3.解题过程 (六)找出字符串中第一个匹配项的下标1.题目描述2.思路3.解题思路(七)重复的子字符串1.题目描述2.思路3.解题过程(八)......
  • 利用基于 Yolo 技术进行植物检测和计数
    这篇论文介绍了一种使用YOLO算法进行植物检测和计数的技术,旨在为农业实践提供一种自动化、有效的解决方案。作者通过收集大量的农田照片,并对每张照片中的植物实例进行精确的边界框标注,训练了这个算法。YOLO算法以其实时物体检测能力而闻名,在图像中将输入图像划分为网格,并预测每个......