1979. 找出数组的最大公约数
分析:
- 首先遍历数组nums,找到max和min
- 求gcd(max, min)
然后如何实现函数gcd呢,实现gcd有两种办法。
- 遍历出min约数,并判断该数是否能整除max,从而找出最大的公约数。
代码:
int gcd(int max, int min){
int ret = 0;
for(int i = 1; i <= min; i++){
if(min % i == 0 && max % i == 0){
ret = i;
}
}
return ret;
}
- 优化,通过分析我们可以得出一个式子,min = [max / min] max + max % min,如果max % min = 0,则说明min就是最大的公约数,否则,我们设a为min, b为max, k为[max / min],如果c是a和b的一个公约数,那么a - kb也是他们的一个公约数,得:
int gcd(int a, int b){
return !b ? a : gcd(b, a % b);
}
int findGCD(int* nums, int numsSize){
int max = INT_MIN;
int min = INT_MAX;
for(int i = 0; i < numsSize; i++){
if(max < nums[i]){
max = nums[i];
}
if(min > nums[i]){
min = nums[i];
}
}
return gcd(max, min % max);
}