main1234 最近的时间轴更新
main1234

main1234

V2EX 第 665345 号会员,加入于 2023-12-01 15:48:34 +08:00
多核下 32 位系统操作 int64 是原子性的么?
问与答  •  main1234  •  29 天前  •  最后回复来自 ysc3839
2
求求爹给解答下 golang sync.WaitGroup 的疑惑
  •  1   
    Go 编程语言  •  main1234  •  31 天前  •  最后回复来自 main1234
    6
    [求问] 没学历没基础咋入门 AI 啊
    程序员  •  main1234  •  7 天前  •  最后回复来自 ianEros
    64
    对于 Gap 锁的一些疑问
    MySQL  •  main1234  •  67 天前  •  最后回复来自 wangxin3
    9
    main1234 最近回复了
    1 天前
    回复了 CareiOS 创建的主题 求职 找一份 iOS/Flutter/ Java 的工作
    2 天前
    回复了 CareiOS 创建的主题 求职 找一份 iOS/Flutter/ Java 的工作
    北京考虑么,[email protected] 给我发一个简历
    @magic3584 谢谢您
    @xing7673 求问为啥赚钱选 IOS 呢??
    @magic3584 感谢,学习路线是先原生还是先 flutter RN ???
    @bthulu


    func reverse(arr []int, target1, target2 int) [][]int {
    res := make([][]int, 0)
    // 先排序
    sort.Ints(arr)
    // 逆序排序
    for i := 0; i < len(arr)/2; i++ {
    arr[i], arr[len(arr)-i-1] = arr[len(arr)-i-1], arr[i]
    }
    sum := 0
    track := make([]int, 0)
    var fn func(start int)
    fn = func(start int) {
    if sum > target1 && sum-track[len(track)-1] < target1 && sum-track[len(track)-1] <= target1-target2 {
    tmp := make([]int, len(track))
    copy(tmp, track)
    res = append(res, tmp)
    return
    }
    for i := start; i < len(arr); i++ {
    if sum-arr[i] >= target1 {
    continue
    }
    if sum-arr[i] >= target1-target2 {
    continue
    }
    sum += arr[i]
    track = append(track, arr[i])
    fn(i + 1)
    track = track[:len(track)-1]
    sum -= arr[i]
    }
    }
    fn(0)
    return res
    }
    @bthulu 对,改成你的判断,然后在 for 里面放两个剪枝就行了
    我的算法应该能继续剪枝
    func reverse(arr []int, target1, target2 int) [][]int {
    res := make([][]int, 0)
    // 先排序
    sort.Ints(arr)
    // 逆序排序
    for i := 0; i < len(arr)/2; i++ {
    arr[i], arr[len(arr)-i-1] = arr[len(arr)-i-1], arr[i]
    }
    sum := 0
    track := make([]int, 0)
    var fn func(start int)
    fn = func(start int) {
    if start == len(arr) {
    if sum < target1 && sum-track[len(track)-1] < target1 && sum-track[len(track)-1] < target1-target2 {
    tmp := make([]int, len(track))
    copy(tmp, track)
    res = append(res, tmp)
    return
    }
    }
    for i := start; i < len(arr); i++ {
    sum += arr[i]
    track = append(track, arr[i])
    fn(i + 1)
    track = track[:len(track)-1]
    sum -= arr[i]
    }
    }
    fn(0)
    return res
    }
    对于奇数,二进制表示中奇数一定比前面的偶数多一个 1 ,多的就是最低位的 1
    如 0 = 0 ,1 = 1 ,2=10 ,3=11
    对于偶数,二进制表示中偶数一定和除以 2 之后的那个数一样多,因为最低位是 0 ,除以 2 就是右移一位
    2 = 10 ,4=100 ,8=1000
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2858 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 09:36 · PVG 17:36 · LAX 02:36 · JFK 05:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.