找出数组的最大公约数
难度:
标签:
题目描述
代码结果
运行时间: 23 ms, 内存: 16.1 MB
/*
* 题目思路:
* 1. 使用Stream找到数组中的最大数和最小数。
* 2. 使用辗转相除法求最大公约数。
*/
import java.util.Arrays;
public class Solution {
public int findGCD(int[] nums) {
int min = Arrays.stream(nums).min().getAsInt();
int max = Arrays.stream(nums).max().getAsInt();
return gcd(min, max);
}
// 辗转相除法求最大公约数
private int gcd(int a, int b) {
while (b != 0) {
int temp = b;
b = a % b;
a = temp;
}
return a;
}
}
解释
方法:
此题解的思路是直接找出给定数组中的最大值和最小值,然后使用 Python 的内置库函数 math.gcd 来计算这两个数的最大公约数。这种方法利用了最大公约数的性质,即最大公约数仅与数组的最大值和最小值有关,不需要考虑数组中的其他元素。
时间复杂度:
O(n)
空间复杂度:
O(1)
代码细节讲解
🦆
题解中提到查找数组中的最大值和最小值需要遍历整个数组两次,是否有更高效的方法在单次遍历中同时确定最大值和最小值?
▷🦆
题解假设了输入数组的长度至少为2,如果只有一个元素的情况是否应该考虑在解题思路中?
▷🦆
在实际应用中如何处理可能出现的输入数据错误,例如数组中包含负数或零的情况?
▷