平均数为k的最长连续子数组 java代码
给定n个正整数组成的数组,求平均数正好等于 k 的最长连续子数组的长度。
时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 256M,其他语言512M
输入描述:
第一行输入两个正整数和,用空格隔开。第二行输入个正整数,用来表示数组。
输出描述:
如果不存在任何一个连续子数组的平均数等于,则输出-1。否则输出平均数正好等于 的最长连续子数组的长度。
示例1
输入例子:
5 2 1 3 2 4 1
输出例子:
3
例子说明:
取前三个数即可,平均数为2。
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int k=in.nextInt();
int[] nums=new int[n+5];
Map<Long,Integer> map=new HashMap<Long,Integer>();
for(int i=1;i<=n;++i){
nums[i]=in.nextInt();
nums[i]-=k;
}
int maxLen=-1;
long sum=0;
for(int i=0;i<=n;++i){
sum+=nums[i];
if (map.containsKey(sum)){
maxLen=Math.max(maxLen,i-map.get(sum));
}else map.put(sum,i);
}
System.out.println(maxLen);
}
}
