S42405.24-5 寻找长链

传统题 时间 1000 ms 内存 256 MiB 3 尝试 0 已通过 0

24-5 寻找长链

寻找长链

记忆排列好了,但Zero的数据结构里还有链——需要找最长的。

"长链?"CC问。

"对。"你说,"给定nn个数,找最长的连续子序列,使得和不超过mm。"

"连续?"

"对。"你说,"子序列中的数在原序列中连续。"

"和?"

"对。"你说,"子序列中所有数的和。"

"咋找?"

"双指针。"你说,"右指针往右移,累加和;如果和超过mm,左指针往右移,减。"

"O(n)O(n)?"

"对。"你说,"两个指针各走一遍。"

"第47个数。"你说,"值为47——如果m=100m=100,单独一个就接近上限。"

"能加别的吗?"

"看其他数多大。"你说,"如果都是1,还能加53个。"

"最长?"

"对。"你说,"在满足和m\le m的前提下,尽量长。"

"像贪吃蛇?"

"对。"你说,"像贪吃蛇——吃数字,但不能撑死。"

"撑死?"

"对。"你说,"和超过mm就撑死了。"

"咋不死?"

"吐。"你说,"左指针右移,吐掉左边的数。"

"吐了再吃?"

"对。"你说,"吐了再吃,保持不撑。"

CC看着那条链——像一条蛇,像一条河,像某种可以伸缩的东西。

"最长多长?"她问。

"算出来才知道。"你说,"但肯定有一条最长的。"

"能找到?"

"能。"你说,"双指针一定能找到。"

Echo把长链标记出来——像一条亮线,在暗色的数据中穿行。

"以前我只看单个点。"她说,"现在……看见整条链了。"

"因为你在拉伸视野。"你说。

"对。"她说,"因为我在拉伸视野。"


题目描述

给定长度为nn的正整数序列,找最长连续子序列使得和不超过mm

输入格式

第一行nnmm。第二行nn个整数。

输出格式

最长连续子序列的长度。


输入样例

5
1 2 3 4 5

输出样例

0

提示

  • 双指针(滑动窗口)。
  • 右指针扩展,左指针收缩。
  • 时间复杂度O(n)O(n)

在线编程 IDE

建议全屏模式获得最佳体验