2902 - Count of Sub-Multisets With Bounded Sum, saving work

This commit is contained in:
2024-01-22 23:44:53 +02:00
parent c4f9f83359
commit aa2b2e9163

View File

@@ -1,30 +1,64 @@
package main
func countSubMultisetsBrute(nums []int, l int, r int) int {
ln := len(nums)
count := 0
for i := 0; i < ln; i++ {
sum := nums[i]
if sum >= l && sum <= r {
count++
} else {
continue
}
for j := 0; j < ln; j++ {
if i == j {
continue
}
sum += nums[j]
if sum >= l && sum <= r {
count++
} else {
break
}
}
}
return count
import (
"fmt"
"sort"
)
type NumberRange struct {
Start, Stop int
}
func CountSubMultisets(nums []int, l int, r int) int {
return countSubMultisetsBrute(nums, l, r)
type NumberCount struct {
Num, Count int
}
type DistinctRange map[int]NumberRange
func CountSubMultisets(nums []int, l int, r int) int {
numLen := len(nums)
if numLen == 0 {
return 0
}
if l > r {
return 0
}
sort.Ints(nums)
fmt.Println(nums)
if nums[0] > r {
return 0
}
if numLen*nums[numLen-1] < l {
return 0
}
ranges := make(DistinctRange)
CurrentNum := nums[0]
CurrentRange := NumberRange{0, 0}
ranges[CurrentNum] = CurrentRange
for i := 1; i < numLen; i++ {
if nums[i] > r {
numLen = i
break
}
r := ranges[nums[i]]
if CurrentNum == nums[i] {
r.Stop = i
} else {
CurrentNum = nums[i]
r = NumberRange{i, i}
}
ranges[CurrentNum] = r
}
fmt.Println(ranges)
result := 0
return result
}