平均数等于k的最长连续数组长度计算

import java.util.HashMap; import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(); int k = in.nextInt(); // 注意 hasNext 和 hasNextLine 的区别 int curSum = 0, avgSum = 0, difSum = 0; int maxLen = -1; HashMap<Integer, Integer> difMap = new HashMap<Integer, Integer>(); //key: difValue,value:index difMap.put(0, 0);

    for (int i = 1; i <= n; i++) {
        curSum += in.nextInt();
        avgSum += k;
        difSum = curSum - avgSum;

        if (difMap.containsKey(difSum)) {
            maxLen = Math.max(maxLen, i - difMap.get(difSum));
        }else{
           difMap.put(difSum, i);
        }
    }
    System.out.println(maxLen) ;
}

}

代码如上,但是用例不能完全通过,12/20 组用例通过 运行时间 1189ms 占用内存

有没有大佬能帮忙看下,哪里有遗漏或错误么

我的逻辑很简单 当第i个数被检查时,如果此时存在一个最长子数组,j~i使得其平均值为k, 那Si-Sj=(i-j)k, 所以,Si-ik= Sj-j*k=dif 由于可能存在多个j都满足条件,要求最长子数组,所以,j要最小的, 故map只记录最小位置的dif

我个人找不到逻辑错误了,但是编译不能通过,就好奇怪

#在线编程#
全部评论
美团考了这个题 也没全过 有方法了楼主踢踢我
点赞 回复 分享
发布于 2023-09-11 19:36 山东

相关推荐

暴走萝莉莉:这是社招场吧,作为HR说个实话:这个维护关系的意思是要有政府资源,在曾经的工作中通过人脉资源拿下过大订单的意思。这个有相关管理经验,意思也是真的要有同岗位经验。应酬什么的对于业务成交来说就算不乐意也是常态,就是要求说话好听情商高,酒量好。
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务