一. 题目
1. 链接
题目链接:1979. 找出数组的最大公约数
2. 框架
c++代码框架:
class Solution {
public:
int findGCD(vector<int>& nums) {
}
};
3. 描述
给你一个整数数组 nums ,返回数组中最大数和最小数的
最大公约数
。两个数的最大公约数 是能够被两个数整除的最大正整数。
4. 示例
输入:nums = [2,5,6,9,10]
输出:2
解释:
nums 中最小的数是 2
nums 中最大的数是 10
2 和 10 的最大公约数是 2
5. 数据范围
2 <=
nums.length
<= 1000
1 <=nums[i]
<= 1000
二. 解题
1. 思路
(1) 可以直接调用C++中的__gcd(int a, int b)
(2) 用较小的数给较大数取模,每次操作后的结果作为新的较小数,旧的较小数成为新的较大数
2. 复杂度
O ( n ) O(n) O(n)
3. 源码
# 解法1
class Solution {
public:
int findGCD(vector<int>& nums) {
int max = nums[0], min = nums[0];
for (int i = 1; i < nums.size(); i++) {
if (nums[i] > max) {
max = nums[i];
}
if (nums[i] < min) {
min = nums[i];
}
}
return __gcd(max, min);
}
};
# 解法2
class Solution {
public:
int gcd(int max, int min) {
int temp;
while(max%min) {
temp = max%min;
max = min;
min = temp;
}
return min;
}
int findGCD(vector<int>& nums) {
int max = nums[0], min = nums[0];
for (int i = 1; i < nums.size(); i++) {
if (nums[i] > max) {
max = nums[i];
}
if (nums[i] < min) {
min = nums[i];
}
}
return gcd(max, min);
}
};
4. 考察
最大公约数