目录
一、题目描述
给你一个整数数组 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
二、题目分析
常规水题~
【1】遍历一遍,找出数组中的最大值、最小值;
【2】使用欧几里得算法求最大公约数
【算法-数论】最大公约数(欧几里得算法/辗转相除法)-CSDN博客
三、Java代码
class Solution {
public int findGCD(int[] nums) {
int max = nums[0];
int min = nums[0];
//找出最大数跟最小数
for (int i = 0; i < nums.length; i++) {
if (max < nums[i]) max = nums[i];
if (min > nums[i]) min = nums[i];
}
return gcd(max, min);
}
//欧几里得算法求最大公约数
public int gcd(int a, int b) {
if (a < b) return gcd(b, a);
int c = a % b;
if (c == 0) {
return b;
} else {
return gcd(b, c);
}
}
}