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)
}
相关推荐
福大大架构师每日一题29 分钟前
ollama v0.35.0发布:决策模型正式上线,接口直接返回选择、概率与评分
golang
lvwangshu3 小时前
T2 最长上升子序列(lis)题解
动态规划·题解·技巧·性质题·思维好题
茉莉玫瑰花茶3 小时前
GO [ 泛型 ]
golang
lvwangshu5 小时前
T1 称重(weight)题解
题解·贪心·总结·技巧·性质题·思维好题
蛋蛋的就会顺顺的6 小时前
hot100——矩阵
java·数据结构·算法·leetcode·力扣
想吃火锅100510 小时前
【leetcode】238.除了自身以外数组的乘积js
javascript·算法·leetcode
Tisfy12 小时前
LeetCode 0020.有效的括号:栈匹配
算法·leetcode·字符串·题解·括号匹配
Navigator_Z12 小时前
LeetCode //C - 1276. Number of Burgers with No Waste of Ingredients
c语言·算法·leetcode
想吃火锅100513 小时前
【leetcode】189.轮转数组js
开发语言·javascript·leetcode
念何架构之路13 小时前
go-grpc服务端调用
开发语言·后端·golang