java 蓝桥杯 前缀和
Posted //我是小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 蓝桥杯 前缀和相关的知识,希望对你有一定的参考价值。
前缀和
什么是前缀和?
假设现在有个数组 arr=[1,2,3,4,5]
用arrSum数组来存储数组arr的前缀和,表示arrSum是arr的前缀和数组
arrSum[0] = arr[0]
arrSum[1] = arr[0]+arr[1]
arrSum[2] = arr[0]+arr[1]+arr[2]
arrSum[3] = arr[0]+arr[1]+arr[2]+arr[3]
arrSum[4] = arr[0]+arr[1]+arr[2]+arr[3]+arr[4]
前缀和的作用
前缀和的作用就是用空间换取时间
在设计算法时,时间复杂度始终是我们关注的重点。我们需要让算法的时间复杂度尽可能低,追求运行效率。有些时候,我们可以通过增加空间占用的方式减少算法的运行时间,这便是空间换时间。
前缀和的最主要目的就是求子数组的和的大小,并且大大的减少时间复杂度,例如:
求arr[1]至arr[3]的和:arrSum[3] - arrSum[0]
求arr的前4项的和 :arrSum[3]
前缀和应用
问题描述
给定一个整数K和一个长度为N整数数组Arr,求数组Arr中和为K的连续的子数组的个数
输入
第一行:一个整数K
第二行:一个整数N
第三行:N个整数,每个整数中间用空格隔开
输出
输出一行包含一个整数
直接上代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//先接收测试数据
Scanner sc=new Scanner(System.in);
int count=0;
int k=sc.nextInt();
int n=sc.nextInt();
int[]arr=new int[n];
int[]arrSum=new int[n];//声明前缀和数组
for (int i = 0; i < n; i++) {
arr[i]=sc.nextInt();
}
//求前缀和
for (int i = 0; i < arrSum.length; i++) {
if(i==0)
arrSum[0]=arr[0];
else
arrSum[i]=arrSum[i-1]+arr[i];
}
//遍历数组的所有子数组,如果子数组的和==k 满足条件 count++
for (int i = 0; i < n; i++) {
for (int j = i; j < n; j++) {
//利用前缀和数组遍历的当前子数组的和
int subSum=arrSum[j]-arrSum[i]+arr[i];
if(subSum==k)count++;
}
}
System.out.println(count);
}
}
以上是关于java 蓝桥杯 前缀和的主要内容,如果未能解决你的问题,请参考以下文章