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)
}
相关推荐
L Jiawen30 分钟前
【Go · Gin】基础知识
开发语言·golang·gin
YGGP8 小时前
【Golang】LeetCode 64. 最小路径和
算法·leetcode
LYFlied10 小时前
【每日算法】LeetCode 1143. 最长公共子序列
前端·算法·leetcode·职场和发展·动态规划
长安er11 小时前
LeetCode 20/155/394/739/84/42/单调栈核心原理与经典题型全解析
数据结构·算法·leetcode·动态规划·
wadesir11 小时前
Go语言中高效读取数据(详解io包的ReadAll函数用法)
开发语言·后端·golang
yoke菜籽12 小时前
LeetCode——三指针
算法·leetcode·职场和发展
幺零九零零13 小时前
Golang-Swagger
开发语言·后端·golang
闲看云起15 小时前
LeetCode day3-最长连续序列
算法·leetcode
六毛的毛15 小时前
比较含退格的字符串
开发语言·python·leetcode
iAkuya15 小时前
(leetcode)力扣100 27合并两个有序链表(迭代/递归)
算法·leetcode·链表