数组-一文搞定前缀和数组

本文深入探讨前缀和的概念及其在数组和矩阵查询中的应用,包括LeetCode上的303题(区域和检索 - 数组不可变)、304题(二维区域和检索 - 矩阵不可变)以及560题(和为 K 的子数组)。通过前缀和技巧,可以将问题的解决时间复杂度降低,提高效率。
摘要由CSDN通过智能技术生成

前言

  就从数组开始,以后会一直更新算法。数组有下图这些知识点与技巧。本文主要讲解其中的前缀和知识点。

思路

  适合的场景:原始数组不会被修改,且频繁查询某个区间的累加和。   创建一个prefixSum数组,长度比原数组nums长度多1。prefixSum[i]存储nums[0]到nums[i]的和。   尤其要注意prefixSum与nums的坐标换算,如下图所示。

区域和检索 - 数组不可变(一维前缀和)

leetcode第303题

解题思路
  常规思路是通过遍历i到j。但这样时间复杂度就是O(n)。    

        采用前缀和。sumRange = prefixSum[right + 1] - prefixSum[left]

        注意原数组与前缀和数组的下标换算,例如nums[i]的前缀和是preSum[i + 1]。如下图所示。

复杂度分析
  时间复杂度:初始化O(n),每次检索O(1),n是数组长度。   空间复杂度:O(n)。 代码

class NumArray {
    private int[] prefixSum;
    public NumArray(int[] nums) {
        prefixSum = new int[nums.length + 1];
        fo
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xichengL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值