平均数等于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
我个人找不到逻辑错误了,但是编译不能通过,就好奇怪
#在线编程#