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)
}
相关推荐
元亓亓亓43 分钟前
LeetCode热题100--101. 对称二叉树--简单
算法·leetcode·职场和发展
1白天的黑夜14 小时前
链表-24.两两交换链表中的结点-力扣(LeetCode)
数据结构·leetcode·链表
快去睡觉~7 小时前
力扣48:旋转矩阵
算法·leetcode·矩阵
卡洛斯(编程版9 小时前
(1) 哈希表全思路-20天刷完Leetcode Hot 100计划
python·算法·leetcode
MrZhangBaby10 小时前
SQL-leetcode—3374. 首字母大写 II
linux·sql·leetcode
bianshaopeng11 小时前
ubuntu go 环境变量配置
开发语言·ubuntu·golang
元清加油11 小时前
【Goland】:协程和通道
服务器·开发语言·后端·网络协议·golang
自信的小螺丝钉11 小时前
Leetcode 343. 整数拆分 动态规划
算法·leetcode·动态规划
lpfasd12311 小时前
01_Go语言基础与环境搭建
开发语言·后端·golang
Q741_14712 小时前
C++ 力扣 438.找到字符串中所有字母异位词 题解 优选算法 滑动窗口 每日一题
c++·算法·leetcode·双指针·滑动窗口