代码拉取完成,页面将自动刷新
package main
import (
"fmt"
"math"
"sort"
)
func numberOfWeeks(milestones []int) int64 {
// 1.排序 2.回溯找最近二分点
sort.Slice(milestones, func(i, j int) bool {
return milestones[i] > milestones[j]
})
n := len(milestones)
sum := 0
for _, v := range milestones {
sum += v
}
trace := 0
res := math.MaxInt32
var dfs func(idx int)
dfs = func(idx int) {
if idx > n {
return
}
if trace > sum/2 {
return
}
res = min(res, sum/2-trace)
for i := idx; i < n; i++ {
trace += milestones[i]
dfs(i + 1)
trace -= milestones[i]
}
}
dfs(0)
res = sum/2 - res
if res == int(math.Ceil(float64(sum)/2)) {
return int64(res * 2)
}
return int64(res*2) + 1
}
func min(a, b int) int {
if a < b {
return a
}
return b
}
func main() {
//fmt.Println(numberOfWeeks([]int{1, 2, 3}))
//fmt.Println(numberOfWeeks([]int{5, 2, 1}))
//fmt.Println(numberOfWeeks([]int{9, 3, 6, 8, 2, 1}))
fmt.Println(numberOfWeeks([]int{5, 7, 5, 7, 9, 7}))
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。