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)
}
相关推荐
老鼠只爱大米1 天前
LeetCode经典算法面试题 #295:数据流的中位数(双堆法、有序列表、平衡树等多种实现方案详解)
算法·leetcode·优先队列··数据流·中位数·java 面试题
x_xbx1 天前
LeetCode:215. 数组中的第K个最大元素
数据结构·算法·leetcode
FatHonor1 天前
【golang学习之旅】使用VScode安装配置Go开发环境
vscode·学习·golang
进击的荆棘1 天前
优选算法——分治
数据结构·算法·leetcode·分治
木井巳1 天前
【递归算法】找出所有子集的异或总和再求和
java·算法·leetcode·决策树·深度优先
ん贤1 天前
AI大模型落地系列:一文读懂 Eino 的 Memory 与 Session(持久化对话)
大数据·ai·golang·eino
Aaswk1 天前
回溯算法的本质理解
c语言·算法·leetcode·力扣·剪枝
迷海1 天前
力扣原题《分发糖果》,采用二分原则,纯手搓,待验证
c++·算法·leetcode
玛卡巴卡ldf1 天前
【LeetCode 手撕算法】(普通数组)53-最大子数组和、56-合并区间、189-轮转数组、238-除了自身以外数组的乘积
数据结构·算法·leetcode
Sakinol#1 天前
Leetcode Hot 100 ——动态规划part02
算法·leetcode·动态规划