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)
}
相关推荐
YuTaoShao3 分钟前
【LeetCode 每日一题】3507. 移除最小数对使数组有序 I
算法·leetcode·职场和发展
无心水1 小时前
4、Go语言程序实体详解:变量声明与常量应用【初学者指南】
java·服务器·开发语言·人工智能·python·golang·go
爱编码的傅同学1 小时前
【今日算法】LeetCode 11.盛水最多的容器 15.三数之和 283.移动0
数据结构·算法·leetcode
漫漫求1 小时前
1、IM:基础连接
开发语言·后端·golang
alphaTao1 小时前
LeetCode 每日一题 2026/1/19-2026/1/25
算法·leetcode
Swift社区1 小时前
LeetCode 382 链表随机节点
算法·leetcode·链表
老鼠只爱大米1 小时前
LeetCode经典算法面试题 #19:删除链表的倒数第N个结点(双指针、栈辅助法等多种实现方案详细解析)
算法·leetcode·链表·双指针·删除链表节点·一趟扫描
漫随流水2 小时前
leetcode回溯算法(131.分割回文串)
数据结构·算法·leetcode·回溯算法
王老师青少年编程2 小时前
2023年12月GESP真题及题解(C++七级): 商品交易
c++·题解·真题·gesp·csp·七级·商品交易
夏鹏今天学习了吗11 小时前
【LeetCode热题100(92/100)】多数元素
算法·leetcode·职场和发展