以两个数为例,两个数可以同时除尽的数的最大的数就是最大公约数,2,4为例,最大公约数就是2,再不懂的话…这边建议重新读小学呢。
java中实现也比较简单,只要循环找到可以被整除的最大的数就可以了,其他语言类似,暴力循环的确是比较简单能想到的方法了,但是同样是暴力循环效率却截然不同,以这道题为例,我开始的时候是这样写的
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 求出a、b的最大公约数。
* @param a int
* @param b int
* @return int
*/
public int gcd (int a, int b) {
int trem=0;
int max;
int min;
int i;
if(a>b)
{
max=a;
min=b;
}
else
{
max=b;
min=a;
}
for(i=1;i<=min;i++)
{
if(max%i==0&min%i==0)
{
trem=i;
}
}
return trem;
}
}
这题需要注意的是循环的值不可能大于较小的值,这里我用了if判断最大值最小值。
虽然能写出来,从小开始筛选,效率较低,公约数一般较大,甚至部分到达较小数本身,这边建议从最大的数循环
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 求出a、b的最大公约数。
* @param a int
* @param b int
* @return int
*/
public int gcd (int a, int b) {
int trem=0;
int max;
int min;
int i;
if(a>b)
{
max=a;
min=b;
}
else
{
max=b;
min=a;
}
for(i=min;i>=1;i--)
{
if(max%i==0&min%i==0)
{
trem=i;
return trem;
}
}
return trem;
}
}
时间差了6-7倍,由此可见,算法的优化至关重要,直接关系到算法的运行效率!!
本次灌水就到这里了,喜欢的记得点个关注哟!