mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-06 17:44:10 +08:00
34 lines
638 B
Go
34 lines
638 B
Go
package leetcode
|
|
|
|
import "sort"
|
|
|
|
func largestDivisibleSubset(nums []int) []int {
|
|
sort.Ints(nums)
|
|
dp, res := make([]int, len(nums)), []int{}
|
|
for i := range dp {
|
|
dp[i] = 1
|
|
}
|
|
maxSize, maxVal := 1, 1
|
|
for i := 1; i < len(nums); i++ {
|
|
for j, v := range nums[:i] {
|
|
if nums[i]%v == 0 && dp[j]+1 > dp[i] {
|
|
dp[i] = dp[j] + 1
|
|
}
|
|
}
|
|
if dp[i] > maxSize {
|
|
maxSize, maxVal = dp[i], nums[i]
|
|
}
|
|
}
|
|
if maxSize == 1 {
|
|
return []int{nums[0]}
|
|
}
|
|
for i := len(nums) - 1; i >= 0 && maxSize > 0; i-- {
|
|
if dp[i] == maxSize && maxVal%nums[i] == 0 {
|
|
res = append(res, nums[i])
|
|
maxVal = nums[i]
|
|
maxSize--
|
|
}
|
|
}
|
|
return res
|
|
}
|