go: add «368. Largest Divisible Subset»

URL:	https://leetcode.com/problems/largest-divisible-subset/
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
Matej Focko 2025-04-06 15:05:27 +02:00
parent 23deeef141
commit 8915c79d5f
Signed by: mfocko
SSH key fingerprint: SHA256:icm0fIOSJUpy5+1x23sfr+hLtF9UhY8VpMC7H4WFJP8

View file

@ -0,0 +1,39 @@
package main
import "slices"
func largestDivisibleSubset(nums []int) []int {
slices.Sort(nums)
dp, prev := make([]int, len(nums)), make([]int, len(nums))
for i, _ := range nums {
dp[i] = 1
prev[i] = -1
}
maxi := 0
for i, x := range nums {
for j, y := range nums {
if j >= i {
break
}
if x%y == 0 && dp[i] < dp[j]+1 {
dp[i] = dp[j] + 1
prev[i] = j
}
}
if dp[i] > dp[maxi] {
maxi = i
}
}
// reconstruct the resulting subset
subset := make([]int, 0)
for i := maxi; i >= 0; i = prev[i] {
subset = append(subset, nums[i])
}
return subset
}