C++ 实现假设一本教材中有P页每页包含第ai个知识点知识点会有所重复现给出每页的知识点ai以及需要看的知识点数K请你求出能够看完全部1~K个知识点的最短连续页数是多少。注意本题必有解不存在不包含的知识点。输入描述3行第1行包含1个数字P代表页数的个数P。第2行包含P个数字代表教材每页中的知识点ai。第3行包含1个数字K代表需要看完的K个知识点。输出描述1行表示最少连续页数。
思路:双指针
- 先用一个哈希表记录每个知识点出现的位置,便于后面的查找。
- 用双指针维护一个区间,使区间内包含所有需要看的知识点。
- 每次向右移动右指针,直到区间包含了所有需要看的知识点,记录此时的区间长度,并向右移动左指针,缩小区间长度,直到不再包含所有需要看的知识点。在这个过程中,记录每个区间的最小长度,即为所求。
时间复杂度:O(n)
C++ 代码
原文地址: https://www.cveoy.top/t/topic/fKSY 著作权归作者所有。请勿转载和采集!