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)
}
相关推荐
米粒12 分钟前
力扣算法刷题 Day 42(股票问题总结)
算法·leetcode·职场和发展
浅念-2 小时前
从LeetCode入门位运算:常见技巧与实战题目全解析
数据结构·数据库·c++·笔记·算法·leetcode·牛客
白毛大侠2 小时前
Docker vs 虚拟机 vs Go 用户态/内核态:这三组概念
运维·docker·golang·kvm
田梓燊2 小时前
leetcode 142
android·java·leetcode
_深海凉_2 小时前
LeetCode热题100-最大数(179)
算法·leetcode·职场和发展
咬_咬3 小时前
go语言学习(map)
开发语言·学习·golang·map
剑挑星河月3 小时前
763.划分字母区间
数据结构·算法·leetcode
小辉同志3 小时前
74. 搜索二维矩阵
c++·leetcode·矩阵·二分查找
圣保罗的大教堂3 小时前
leetcode 3740. 三个相等元素之间的最小距离 I 简单
leetcode
U盘失踪了3 小时前
go 常量
开发语言·后端·golang