平均数为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); } }