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)
}
相关推荐
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 141. 环形链表 | C++ 哈希表直觉解法
c++·leetcode·链表
月屯5 小时前
grpc-api模块化依赖
golang
瑶山6 小时前
IDEA 配置Go语言开发环境、GOPATH传统 Go 项目导入
java·golang·intellij-idea
会编程的土豆6 小时前
【go】 Go语言中的 defer:从入门到理解底层机制(讲透版)
开发语言·后端·golang
北顾笙9807 小时前
day35-数据结构力扣
数据结构·算法·leetcode
cpp_25017 小时前
P2249 【深基13.例1】查找
数据结构·c++·算法·题解·二分·洛谷
ulias2128 小时前
leetcode热题 - 4
算法·leetcode·职场和发展
圣保罗的大教堂8 小时前
leetcode 1559. 二维网格图中探测环 中等
leetcode
初心未改HD9 小时前
Go语言Slice切片底层原理深度解析
开发语言·golang
世界尽头与你9 小时前
Go 语言高级函数特性
开发语言·golang