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


}

全部评论
太牛了,大佬,根本想不到
点赞 回复
分享
发布于 03-30 17:14 上海

相关推荐

头像
昨天 15:05
已编辑
腾讯_后端开发
小红书 iOS社区技术 年薪52w+包三餐大小周
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务