平均数等于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 山东

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务