leetcode 前缀和-题集

560. 和为 K 的子数组
func subarraySum(nums []int, k int) int {
    cnt := 0
    n := len(nums)
    for i := 0; i < n; i++ {
        sum := 0
        for j := i; j < n; j++ {
            sum += nums[j]
            if sum == k {
                cnt++
            }
        }
    }
    return cnt
}
303. 区域和检索 - 数组不可变
type NumArray struct {
    preSums []int
}


func Constructor(nums []int) NumArray {
    n := len(nums)
    sums := make([]int, n+1)
    sum := 0
    for i := 0; i < n; i ++ {
        sum += nums[i]
        sums[i+1] = sum
    }
    return NumArray{sums}
}


func (this *NumArray) SumRange(left int, right int) int {
    return this.preSums[right+1] - this.preSums[left]
}
304. 二维区域和检索 - 矩阵不可变
type NumMatrix struct {
    nums [][]int
}


func Constructor(matrix [][]int) NumMatrix {
    m, n := len(matrix), len(matrix[0])
    nums := make([][]int, m+1)
    for i := 0; i <= m; i++ {
        nums[i] = make([]int, n+1)
    }
    for i := 1; i <= m; i++ {
        for j := 1; j <=n; j++ {
            nums[i][j] =nums[i-1][j] + nums[i][j-1] - nums[i-1][j-1] + matrix[i-1][j-1]
        }
    }
    return NumMatrix{nums}
}


func (this *NumMatrix) SumRegion(row1 int, col1 int, row2 int, col2 int) int {
    return this.nums[row2+1][col2+1] - this.nums[row1][col2+1] - this.nums[row2+1][col1] + this.nums[row1][col1]
}
724. 寻找数组的中心下标
func pivotIndex(nums []int) int {
    var sum int
    n := len(nums)
    preSums := make([]int, n+1)
    // 计算前缀和
    for i := 1; i <= n; i++ {
        sum += nums[i-1]
        preSums[i] = sum
    }

    for i := 0; i < n; i++ {
        if preSums[i] == preSums[n] - preSums[i+1] {
            return i
        }
    }
    return -1
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值