解题思路
题目要求:在连续采样序列中,找最长子段 [l,r],使得段内每个温度 T 都满足 18≤T≤24,且 max−min≤4。若有多段同为最长,按左端点升序逐行输出起止下标(从 0 开始)。
温度取值只有 [0,30],合法窗口里更只有 [18,24] 共 7 个值,因此用双指针滑动窗口 + 计数桶即可,不必维护单调队列:
- 右指针 r 从左到右枚举;用数组 cnt[0..30] 记录当前窗口 [l,r] 内各温度出现次数。
- 若 a[r] 不在 [18,24]:清空计数桶,令 l=r+1,窗口断开。
- 否则把 a[r] 加入窗口;用桶从低到高 / 从高到低扫一遍得到当前 min、max。若 max−min>4,不断把 a[l] 移出窗口并 l+=1,直到温差合法。
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写