Golang | Leetcode Golang题解之第307题区域和检索-数组可修改

题目:

题解:

Go 复制代码
type NumArray struct {
    nums, tree []int
}

func Constructor(nums []int) NumArray {
    tree := make([]int, len(nums)+1)
    na := NumArray{nums, tree}
    for i, num := range nums {
        na.add(i+1, num)
    }
    return na
}

func (na *NumArray) add(index, val int) {
    for ; index < len(na.tree); index += index & -index {
        na.tree[index] += val
    }
}

func (na *NumArray) prefixSum(index int) (sum int) {
    for ; index > 0; index &= index - 1 {
        sum += na.tree[index]
    }
    return
}

func (na *NumArray) Update(index, val int) {
    na.add(index+1, val-na.nums[index])
    na.nums[index] = val
}

func (na *NumArray) SumRange(left, right int) int {
    return na.prefixSum(right+1) - na.prefixSum(left)
}
相关推荐
Continue202118 分钟前
golang 使用双向链表作为container/heap的载体
链表·golang·优先队列·双向链表·heap·container/heap
SharkWeek.1 小时前
【力扣Hot 100】普通数组2
数据结构·算法·leetcode
梦想画家2 小时前
Golang Gin系列-8:单元测试与调试技术
golang·单元测试·gin
BinaryBardC7 小时前
Swift语言的网络编程
开发语言·后端·golang
邓熙榆7 小时前
Haskell语言的正则表达式
开发语言·后端·golang
Ciderw10 小时前
Go中的三种锁
开发语言·c++·后端·golang·互斥锁·
C++小厨神11 小时前
C#语言的学习路线
开发语言·后端·golang
梁雨珈12 小时前
PL/SQL语言的图形用户界面
开发语言·后端·golang
Ciderw13 小时前
MySQL为什么使用B+树?B+树和B树的区别
c++·后端·b树·mysql·面试·golang·b+树
齐雅彤13 小时前
Bash语言的并发编程
开发语言·后端·golang