2902 - Count of Sub-Multisets With Bounded Sum, saving work
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user