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##题解#