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)
}
相关推荐
闻缺陷则喜何志丹2 小时前
【分块 差分数组 逆元】3655区间乘法查询后的异或 II|2454
c++·算法·leetcode·分块·差分数组·逆元
Ch_ty4 小时前
leetcode解题思路分析(一百六十八)1452 - 1458 题
算法·leetcode·哈希算法
pilgrim5313 小时前
结合 Leetcode 题探究KMP算法
算法·leetcode
前进的李工16 小时前
LeetCode hot100:234 回文链表:快慢指针巧判回文链表
python·算法·leetcode·链表·快慢指针·回文链表
sin_hielo16 小时前
leetcode 3228
算法·leetcode
xier_ran17 小时前
力扣(LeetCode)100题:41.缺失的第一个正数
数据结构·算法·leetcode
小画家~17 小时前
第二十八:golang Time.time 时间格式返回定义结构体
java·前端·golang
Swift社区17 小时前
LeetCode 425 - 单词方块
算法·leetcode·职场和发展
Miraitowa_cheems19 小时前
LeetCode算法日记 - Day 104: 通配符匹配
linux·数据结构·算法·leetcode·深度优先·动态规划
q***75601 天前
【Golang】——Gin 框架中间件详解:从基础到实战
中间件·golang·gin