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)
}
相关推荐
棱镜Coding23 分钟前
LeetCode-Hot100 27.合并两个有序链表
算法·leetcode·链表
求梦82042 分钟前
【力扣hot100题】两两交换链表中的节点(25)
算法·leetcode·链表
沈雅馨1 小时前
SQL语言的云计算
开发语言·后端·golang
血小板要健康1 小时前
189.轮转数组,力扣
数据结构·算法·leetcode
chillxiaohan1 小时前
GO学习记录——动态创建测试http接口
学习·http·golang
小二·1 小时前
Go 语言系统编程与云原生开发实战(第2篇):并发编程深度实战 —— Goroutine、Channel 与 Context 构建高并发 API 网关
开发语言·云原生·golang
POLITE32 小时前
Leetcode 236. 二叉树的最近公共祖先 (Day 17) JavaScript
linux·javascript·leetcode
闲谈共视2 小时前
Go语言与区块链技术的渊源
开发语言·golang·区块链
沉默-_-2 小时前
力扣hot100普通数组(1)--C++
java·数据结构·算法·leetcode·数组
csdn_aspnet2 小时前
Go语言常用算法深度解析:并发与性能的优雅实践
后端·golang·go