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:
parent
23deeef141
commit
8915c79d5f
1 changed files with 39 additions and 0 deletions
39
go/largest-divisible-subset.go
Normal file
39
go/largest-divisible-subset.go
Normal 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
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue