跳转至

双指针

滑动窗口

用于求解满足某条件的最长/短连续子序列。写代码前一定要确定区间范围,[left, right][left, right) 等。下面采用的区间范围是 [l, r]

  • 求最长

    int l = 0;
    
    for (int r = 0; r < N; r++)
    {
        // 窗口扩大,加入 r 处的元素
    
        while (l < r && !valid())
        {
            // 窗口缩小,移除 l 处的元素
            l++;
        }
    
        if (valid())
        {
            // 更新答案
        }
    }
    
  • 求最短

    int l = 0;
    
    for (int r = 0; r < N; r++)
    {
        // 窗口扩大,加入 r 处的元素
    
        while (l <= r && valid())
        {
            // 更新答案
            // 窗口缩小,移除 l 处的元素
            l++;
        }
    }