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

相关推荐

不愿透露姓名的神秘牛友
10-09 16:39
已编辑
英俊的靓仔offer...:我感觉吧第二个寻迹小车的项目有点配不上你的学历了,写上去扣分了都可能对你来说,好歹是211硕士嘛,写在我这种二本混子的简历上还说得过去,个人观点哦,能再有个好点的项目应该会好很多,或者干脆不写第二个换个啥实习经历?
点赞 评论 收藏
分享
LZStarV:冲就好了,就算真的是字节也冲,面评脏了大不了等三四个月就淡了,而且等到那个时候实力进步了选择还多,何必拘泥于字节
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务