题解《算法零基础100讲》(第12讲) 因子和&&(第13讲 --- 第一题)最大公约数(java版)
Posted 敲代码的xiaolang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题解《算法零基础100讲》(第12讲) 因子和&&(第13讲 --- 第一题)最大公约数(java版)相关的知识,希望对你有一定的参考价值。
😁算法小白欢迎加入此社区:https://bbs.csdn.net/forums/hero?category=0
由英雄大佬带领的抱团学算法队伍,从0开始,期待你的加入🥳
本博文是对以下文章习题所作的题解,如有不足,请多指教:https://blog.csdn.net/WhereIsHeroFrom/article/details/120875424
https://blog.csdn.net/WhereIsHeroFrom/article/details/121092685
题解:
12讲题目:
https://leetcode-cn.com/problems/four-divisors/
想法就是直接枚举,遍历数组里面的每一个元素,当找到一个因子的时候,让因子的个数加一,如果 i * i !=num,也就是说,此时还有另外一个因子,所以此时因子的个数再加一,直到因子的个数是4的时候,停止操作,然后把所求的和返回。
class Solution {
public int sumFourDivisors(int[] nums) {
int answer = 0;
int i;
for (int num : nums) {
int number = 0, sum = 0;
for (i = 1; i*i <= num; ++i) {
if (num % i == 0) {
number++;
sum = sum + i;
if (i*i != num) {
number++;
sum += num/i;
}
}
}
if(number==4) {
answer = answer + sum;
}
}
return answer;
}
}
13讲第一题:
https://leetcode-cn.com/problems/find-greatest-common-divisor-of-array/
思路很简单,求出最值之后,再进行最大公约数求解。
class Solution {
public int findGCD(int[] nums) {
int maxNum = Arrays.stream(nums).max().getAsInt();
int minNum = Arrays.stream(nums).min().getAsInt();
int num = gcd(minNum, maxNum);
return num;
}
int gcd(int minNum, int maxNum) {
int i;
for(i = minNum; i >= 2; i--) {
if(minNum % i == 0 && maxNum % i == 0)
return i;
}
return 1;
}
}
显然,太慢了。。。。
class Solution{
public int findGCD(int[] nums){
int i;
int max = nums[0];
for(i = 1; i<nums.length; i++){
if(nums[i] > max){
max = nums[i];
}
}
int min = nums[0];
for(i = 1; i<nums.length; i++){
if(nums[i] < min){
min = nums[i];
}
}
int num = gcd(min, max);
return num;
}
int gcd(int min, int max) {
int i;
for(i = min; i >= 2; i--) {
if(min % i == 0 && max % i == 0)
return i;
}
return 1;
}
}
使用for循环分别求最大最小值,然后再求最大公约数。
有问题欢迎留言,欢迎加入“万人千题”社区,在这里一起努力。
以上是关于题解《算法零基础100讲》(第12讲) 因子和&&(第13讲 --- 第一题)最大公约数(java版)的主要内容,如果未能解决你的问题,请参考以下文章
题解《算法零基础100讲》(第10讲) 因子分解和枚举(java版)
题解《算法零基础100讲》(第6讲) 日期算法(java版)
题解《算法零基础100讲》(第16讲) 变量交换算法(java版)