跳到主要内容

368.最大整除子集

链接:368.最大整除子集
难度:Medium
标签:数组、数学、动态规划、排序
简介:给你一个由 无重复 正整数组成的集合 nums ,请你找出并返回其中最大的整除子集 answer。

题解 1 - typescript

  • 编辑时间:2021-04-23
  • 执行用时:124ms
  • 内存消耗:41MB
  • 编程语言:typescript
  • 解法介绍:动态规划。
function largestDivisibleSubset(nums: number[]): number[] {
nums.sort((a, b) => a - b);
const len = nums.length;
let maxSize = 1;
let maxVal = nums[0];
const dp = new Array(len).fill(1);
for (let i = 1; i < len; i++) {
const num = nums[i];
for (let j = 0; j < i; j++) {
if (num % nums[j] === 0) dp[i] = Math.max(dp[i], dp[j] + 1);
}
if (dp[i] > maxSize) {
maxSize = dp[i];
maxVal = num;
}
}
const ans: number[] = [];
for (let i = len - 1; i >= 0; i--) {
const num = nums[i];
if (dp[i] === maxSize && maxVal % num === 0) {
ans.unshift(num);
maxSize--;
maxVal = num;
}
}
return ans;
}