题意:给定长度为 n 的货位序列,每个位置放一种商品(编号从 1 开始)。再给出 m 个要求数组 b[1..m],表示第 x 类商品在区间内至少出现 bx 次。求满足所有要求的最短连续区间长度,不存在则输出 -1。
核心算法:双指针滑动窗口
total[x]
,若存在 total[x] < b[x]
(且 b[x]>0
),则必无解,直接输出 -1。[l, r]
,并用 cnt[x]
统计窗口内每个品类出现次数。某超市要对一批货架上的商品进行备货检查。货架上共有 n 个连续的货位(编号 1 到 n ),每个货位上放置着一种商品。当前超市有 m 类商品(编号 1 到 m ),其中第 x 类商品要求在检查区间内至少出现 bx 次 (bx 为非负整数)。
请找出长度最短的连续货位区间 [l,r] ,使得该区间内 1 到 m 类商品的出现次数均满足上述要求。我们定义区间长度为 r−l+1 。若不存在这样的区间,输出 −1 。
第一行包含两个整数 n 和 m(1≤n,m≤105) ,分别表示货位总数和商品的类别数。
第二行包含 n 个整数,依次表示每个货位上的商品编号。
第三行包含 m 个整数,依次表示第 1 到 m 类商品的最低出现次数要求( b1 到 bm ) 。
保证商品编号为不超过 105 的非负整数。
输出一个整数,表示满足要求的最短区间长度;
若不存在,输出 −1 。
输入
10 4
3 1 2 1 3 4 2 1 3 2
2 1 0 1
输出
5
说明
重点监拉的 4 类商品要求:
商品 1 :至少出现 2 次;
商品 2 :至少出现 1 次;
商品 3 :至少出现 0 次(无要求);
商品 4 :至少出现 1 次。
其中一种符合要求的最短区间是 [4,8] (商品序列为 [1,3,4,2,1],长度为 5 。