您的位置:首页 > 文旅 > 美景 > C语言 | Leetcode C语言题解之第368题最大整除子集

C语言 | Leetcode C语言题解之第368题最大整除子集

2024/10/6 6:05:30 来源:https://blog.csdn.net/m0_59237910/article/details/141479077  浏览:    关键词:C语言 | Leetcode C语言题解之第368题最大整除子集

题目:

题解:

int cmp(int* a, int* b) {return *a - *b;
}int* largestDivisibleSubset(int* nums, int numsSize, int* returnSize) {int len = numsSize;qsort(nums, numsSize, sizeof(int), cmp);// 第 1 步:动态规划找出最大子集的个数、最大子集中的最大整数int dp[len];for (int i = 0; i < len; i++) {dp[i] = 1;}int maxSize = 1;int maxVal = dp[0];for (int i = 1; i < len; i++) {for (int j = 0; j < i; j++) {// 题目中说「没有重复元素」很重要if (nums[i] % nums[j] == 0) {dp[i] = fmax(dp[i], dp[j] + 1);}}if (dp[i] > maxSize) {maxSize = dp[i];maxVal = nums[i];}}// 第 2 步:倒推获得最大子集int* res = malloc(sizeof(int) * len);*returnSize = 0;if (maxSize == 1) {res[(*returnSize)++] = nums[0];return res;}for (int i = len - 1; i >= 0 && maxSize > 0; i--) {if (dp[i] == maxSize && maxVal % nums[i] == 0) {res[(*returnSize)++] = nums[i];maxVal = nums[i];maxSize--;}}return res;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com