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)
}
相关推荐
稚辉君.MCA_P8_Java2 小时前
通义 Go 语言实现的插入排序(Insertion Sort)
数据结构·后端·算法·架构·golang
源代码•宸3 小时前
GoLang写一个简单版生命游戏模拟器
经验分享·笔记·学习·游戏·golang
q***01773 小时前
Linux 下安装 Golang环境
linux·运维·golang
稚辉君.MCA_P8_Java3 小时前
Gemini永久会员 Go 实现动态规划
数据结构·后端·算法·golang·动态规划
柠石榴5 小时前
go-1 模型
开发语言·后端·golang
smj2302_7968265210 小时前
解决leetcode第3753题范围内总波动值II
python·算法·leetcode
leoufung13 小时前
LeetCode 92 反转链表 II 全流程详解
算法·leetcode·链表
im_AMBER15 小时前
Leetcode 59 二分搜索
数据结构·笔记·学习·算法·leetcode
leoufung15 小时前
LeetCode 61. 旋转链表(Rotate List)题解与思路详解
leetcode·链表·list
想搞艺术的程序员16 小时前
深入 NSQ 延迟消息实现原理:设计巧思与性能优化
性能优化·golang·nsq