0
点赞
收藏
分享

微信扫一扫

《算法基础》最大公约数

DT_M 2022-03-19 阅读 58
算法

目录

1、LeetCode——1979. 找出数组的最大公约数

 2、LeetCode——LCP 02. 分式化简


1、LeetCode——1979. 找出数组的最大公约数

思路:先给数组排好序,然后直接求最大值和最小值的最大公约数

代码及详情:

// qsort排序需要的函数
int cmp(const void* a, const void* b){
    return *(int*)a - *(int*)b;
}
// 求最大公约数函数
int gcd(int a, int b) {
    return !b ? a : gcd(b, a % b);
}
int findGCD(int* nums, int numsSize){
    qsort(nums,numsSize,sizeof(int),cmp);
    int min = nums[0];
    int max = nums[numsSize - 1];

    // 迭代法求公约数
    // while(min){
    //     int t = max % min;
    //     max = min;
    //     min = t;
    // }
    // return max;

    return gcd(min,max);
}

 2、LeetCode——LCP 02. 分式化简

 思路:将数组从后往前遍历计算,先计算出通分后的分子,在把分子分母颠倒进行下一次循环计算,最后退出循环时再手动颠倒以下分子分母的位置。

代码及详情:

/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
 // 就是即将要加的整数乘以分母再加上分子,等到加下一个元素的时候,再颠倒一下分子和分母。 
 // 当然了,最后一次执行,分子和分母没有颠倒,所以最后再颠倒一次
int* fraction(int* cont, int contSize, int* returnSize){
    int* ans = (int*)malloc(sizeof(int) * 2);
    int c = 1;  // 分子
    int d = cont[contSize - 1];  // 分母
    for(int i = contSize - 1; i > 0; i--){
        // 计算出同分后的分子,也就是下一次的分母
        c = cont[i - 1] * d + c;
        // 颠倒分母分子
        int temp = c;
        c = d;
        d = temp;
    }
    ans[0] = d;
    ans[1] = c;
    *returnSize = 2;
    return ans;
}
举报

相关推荐

0 条评论