1979-找出数组的最大公约数
给你一个整数数组 nums
,返回数组中最大数和最小数的 最大公约数 。
两个数的 最大公约数 是能够被两个数整除的最大正整数。
示例 1:
**输入:** nums = [2,5,6,9,10]
**输出:** 2
**解释:**
nums 中最小的数是 2
nums 中最大的数是 10
2 和 10 的最大公约数是 2
示例 2:
**输入:** nums = [7,5,6,8,3]
**输出:** 1
**解释:**
nums 中最小的数是 3
nums 中最大的数是 8
3 和 8 的最大公约数是 1
示例 3:
**输入:** nums = [3,3]
**输出:** 3
**解释:**
nums 中最小的数是 3
nums 中最大的数是 3
3 和 3 的最大公约数是 3
提示:
2 <= nums.length <= 1000
1 <= nums[i] <= 1000
方法一:按要求计算
思路与算法
我们首先遍历数组 nums 得到最大值与最小值后,再计算两者的最大公约数即可。
对于计算最大公约数的部分,C++ 与 Python 的标准库中都有计算两个整数最大公约数的函数。
最大公约数的求法
计算两个整数最大公约数 gcd}(a, b) 的一种常见方法是欧几里得算法,即辗转相除法。其核心部分为:
\text{gcd}(a, b) = \text{gcd}(b, a\ \text{mod}\ b).
代码
1 | class Solution { |
1 | import math |
复杂度分析
时间复杂度:O(n + \log M),其中 n 为 nums 的长度,M 为 nums 的最大值。遍历数组寻找最大值与最小值的时间复杂度为 O(n),计算最大公约数的时间复杂度为 O(\log M)。
空间复杂度:O(1)。
Comments