当前位置: 首页 > news >正文

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

http://www.mrgr.cn/news/6656.html

相关文章:

  • SpringBoot项目多线程实现定时任务-只需要三步
  • Educational Codeforces Round 169 (Rated for Div. 2)
  • 【Stream】流媒体从入门到入土 (1)
  • C++个人专项笔记
  • IT 人员配置的演变趋势:2024 年上半年的见解
  • 【MATLAB学习笔记】绘图——分割绘图背景并填充不同的颜色
  • MFC读取 Excel
  • Linux操作系统
  • 算法力扣刷题记录 八十九【332.重新安排行程】
  • GB T11457-2006信息技术软件工程术语
  • maven环境配置及IDEA配置
  • 2024年8月23日嵌入式学习
  • 编译 buildroot 错误录
  • (十四)基于 Flink SQL 应用案例
  • Elasticsearch + Search UI 构建一个文件搜索引擎
  • 如何使用cornerstone3D渲染3D影像
  • 单例模式在实现webserver这个项目中起到了什么作用
  • 实验室安全分级分类管理系统在高校中的具体应用
  • java ssl使用自定义证书或忽略证书
  • 创新实践:流媒体服务器如何推动WebRTC支持H.265及JS硬软解码(MSE硬解、WASM软解)