目录
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;
}