基础算法篇 |
您所在的位置:网站首页 › 差分运算的作用 › 基础算法篇 |
本次我们介绍基础算法中的前缀和与差分,我们会从下面几个角度来介绍前缀和与差分: 前缀和介绍一维前缀和二维前缀和差分介绍一维差分二维差分 前缀和介绍首先我们来简单介绍一下前缀和: 我们首先定义一个长度为n的数组,然后我们希望求这个数组的部分长度的总和如果正常采用我们的for循环来遍历一遍的话: 复杂度为O(n)这时如果我们提前将这些数据保存起来,在多次查询时就会方便很多: 我们将数组的第i个值定义为ai我们将数组的前n个值的和定义为Sn其实就是类似于我们数学上的基本算法我们如果想要求解某一部分的值,只需要用S进行删减即可: // sum[l,r] = S[r] - S[l-1]这里我们做一个小小的细节处理: // 由于我们需要S[r] - S[l-1]完成计算 // 那么当我们的l=0时,我们需要S[r]-S[-1],这明显是不可行的,但是如果我们将整体往前移动一位 // 我们直接让数组从1开始,让S数组也从1开始,并将S[0]=0,这样我们在计算[1,k]之间的数时就可以直接使用S[r]-S[l-1]了 一维前缀和题型: 输入数组长度和一组数组,输入需要查询的前缀和次数,输入需要查询的区块下标,返回对应的sum值代码展示: import java.util.Scanner; public class PrefixSum { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 输入数组长度和查询次数 int n = scanner.nextInt(); int k = scanner.nextInt(); // 输入数组内容 int[] arr = new int[n+1]; for (int i = 1; i |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |