首页 > 其他分享 >[刷题技巧] 前缀和相关知识点汇总

[刷题技巧] 前缀和相关知识点汇总

时间:2024-01-14 16:44:06浏览次数:33  
标签:知识点 前缀 nums int prefixSum length preSum 刷题

一、前缀和的作用

前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和。

二、前缀和的思路

将原始数组进行预处理,将来需要查询数据的时候,只需要查询预处理的前缀和数组的某些值即可。
前缀和的求解是【动态规划】。

三、前缀和的定义


四、前缀和数组的构造

//int[] nums = {3, 5, 2, -2, 4, 1};

// 构造方式一:
int[] prefixSum = new int[nums.length + 1];
prefixSum[0] = 0;
for (int i = 1; i < prefixSum.length; i ++) {
    prefixSum[i] = prefixSum[i - 1] + nums[i - 1];
}

// 构造方式二:
int[] prefixSum = new int[nums.length];
prefixSum[0] = nums[0];
for (int i = 1; i < prefixSum.length; i ++) {
    prefixSum[i] = prefixSum[i - 1] + nums[i];
}

递推公式:

  • 子数组[i ... j]的和:nums[i ... j ] = preSum[j + 1] - preSum[i]
  • 如果区间长度为1,即j == i,则nums[i] = preSum[i + 1] - preSum[i]

标签:知识点,前缀,nums,int,prefixSum,length,preSum,刷题
From: https://www.cnblogs.com/keyongkang/p/17963867

相关文章

  • [刷题班] LeetCode1480. 一维数组的动态和
    题目描述思路:前缀和前缀和数组(prefixSum)的构造方法一:classSolution{publicint[]runningSum(int[]nums){int[]preSum=newint[nums.length];preSum[0]=nums[0];for(inti=1;i<nums.length;i++){preSum[i]......
  • [刷题班] LeetCode125. 验证回文串
    题目描述思路:左右指针只考虑数字和字母字母的话需要全部转化为小写然后使用左右指针判断是否是回文串方法一:classSolution{publicbooleanisPalindrome(Strings){List<Character>list=newArrayList<>();for(charc:s.toCharArray()){......
  • [刷题班] LeetCode11. 盛最多水的容器
    题目描述思路:左右指针方法一:暴力,超出时间限制模拟所有情况,记录最大的体积值。体积=Math.min(height[i],height[j])*(j-i)classSolution{publicintmaxArea(int[]height){intres=Integer.MIN_VALUE;for(inti=0;i<height.leng......
  • [刷题班] LeetCode27. 移除元素
    题目描述思路:快慢指针slow指针:其前面都是数值不等于val的元素。fast指针:用于遍历。方法一:classSolution{publicintremoveElement(int[]nums,intval){intslow=0,fast=0;for(;fast<nums.length;fast++){if(nums[fas......
  • [刷题班] LeetCode344. 反转字符串
    题目描述思路:左右指针方法一:classSolution{publicvoidreverseString(char[]s){intleft=0,right=s.length-1;while(left<right){chartemp=s[left];s[left]=s[right];s[right]=temp;......
  • [刷题班] LeetCode80. 删除有序数组中的重复项II
    题目描述思路:快慢指针slow指针指向已经处理元素的下一个位置因为数组有序,如果nums[fast]==nums[slow-2],那么nums[fast]肯定等于nums[slow-1],那么此时这个数就出现了三次。此时slow保持不变,fast继续遍历。关键:nums[fast]!=nums[slow-2]方法一:classSolution{......
  • [刷题班] LeetCode26. 删除有序数组中的重复项
    题目描述思路:快慢指针slow指针:指向已经处理的区域(没有重复元素)的最后一个位置fast指针:指向当前正在处理的元素方法一:classSolution{publicintremoveDuplicates(int[]nums){intslow=0,fast=0;for(;fast<nums.length;fast++){......
  • 前缀和,二分 - [ABC203D] Pond
    AT_abc203_DPond题意给出一个\(N\timesN\)的矩阵,然后依次枚举\(k\timesk\)的子矩阵。对于\(k\timesk\)的子矩阵,一共有个\(k^2\)元素,找出其中的中位数。这里的中位数是子矩阵中元素从大到小排列的第$\left\lfloor\frac{k^2}{2}\right\rfloor$个元素。问......
  • 刷题笔记——队列(C++)
    1696.跳跃游戏VI-力扣(LeetCode)给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。一开始你在下标 0 处。每一步,你最多可以往前跳 k 步,但你不能跳出数组的边界。也就是说,你可以从下标 i 跳到 [i+1,min(n-1,i+k)] 包含 两个端点的任意位置。你的目标是......
  • 【C/C++】知识点笔记
    1-联合体内嵌结构体初始化赋值union{struct{inti;floatf;char*p;};into;}obj3={1,2.2,"sk",4,9};printf("structinlayunion:%d,%f,%s,%d\n",obj3.i,obj3.f,obj3.p,obj3.o);输出:structin......