c语言刷——滑动窗口&&双指针 leetcode合集

字符串问题

3. 无重复字符的最长子串

76. 最小覆盖子串

424. 替换后的最长重复字符

438. 找到字符串中所有字母异位词

1208. 尽可能使字符串相等

连续1的问题

485. 最大连续 1 的个数

487. 最大连续1的个数 II(p)

  • 题目 : 给定一个二进制数组 nums ,如果最多可以翻转一个 0 ,则返回数组中连续 1 的最大个数。
  • 例子:输入:nums = [1,0,1,1,0]
    输出:4
    解释:翻转第一个 0 可以得到最长的连续 1。
    当翻转以后,最大连续 1 的个数为 4。
int findMaxConsecutiveOnes(int* nums, int numsSize)
{
    int n = numsSize;

    int zeroId = -1;
    int zeroCnt = 0;
    int slow = 0, fast = 0;
    int res = 0;
    for (; fast < n; fast++) {
        if (nums[fast] == 0) {
            if (zeroCnt == 0) {
                zeroCnt = 1; // 记录第一次出现0,这个if分支只能进1次!!!
            } else {
                // zeroCnt = 0; // 恢复0的计数值,这个判断条件不能加
                slow = zeroId + 1; // 更新slow
            }
            zeroId = fast; // 记录位置
        }

        res = fmax(res, fast - slow + 1);
    }

    return res;
}

1004. 最大连续1的个数 III

2024. 考试的最大困扰度

综合题

239. 滑动窗口最大值

posted @ 2023-04-23 10:13  胖白白  阅读(21)  评论(0编辑  收藏  举报