7.22阿里笔经第二题问题,贴了代码,求指教
题目是这样的:
输入是两行,第一行n和m,第二行是数组
表示一个长度为n的数组a,和m
要求找出数组的连续子区间,要求其中的某一个元素的个数不少于m
例如
输入 5 2
1 2 1 2 3
输出 5
分析[1,3][1,4][1,5][2,4][2,5]满足条件故答案为5
不知道为啥一个case都过不了,有大佬说一下问题吗,求求了
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
while (in.hasNext()) {
int n = in.nextInt();
int[] a = new int[n];
int m = in.nextInt();
for (int i = 0; i < n; i++) {
a[i] = in.nextInt();
}
int res = helper(a, m);
System.out.println(res);
}
}
public static int helper(int[] nums, int k) {
int len = nums.length;
int[] map = new int[len + 1];
int left = 0, right = 0;
int cnt = 0;
while (right < len) {
int cur = nums[right];
map[cur]++;
if (map[cur] >= k) {
cnt += len - right;
}
while (map[cur] >= k) {
int l = nums[left];
map[l]--;
left++;
}
right++;
}
return cnt;
}
}
大佬已经指出错了,cnt+=len - right;应该在while里边,我就是个辣鸡,给大家看笑话了
#笔试题目##秋招##Java##题解#
顺丰集团工作强度 296人发布