算法刷题记录

95 阅读1分钟

链表

数组

滑动窗口(双向队列)

  1. 滑动窗口的最大值
  2. 最小覆盖子串

滑动窗口代码框架

详细过程戳这里

/* 滑动窗口算法框架 */
void slidingWindow(string s, string t) {
    unordered_map<char, int> need, window;
    for (char c : t) need[c]++;
    
    int left = 0, right = 0;
    int valid = 0; 
    while (right < s.size()) {
        // c 是将移入窗口的字符
        char c = s[right];
        // 右移窗口
        right++;
        // 进行窗口内数据的一系列更新
        ...

        /*** debug 输出的位置 ***/
        printf("window: [%d, %d)\n", left, right);
        /********************/
        
        // 判断左侧窗口是否要收缩
        while (window needs shrink) {
            // d 是将移出窗口的字符
            char d = s[left];
            // 左移窗口
            left++;
            // 进行窗口内数据的一系列更新
            ...
        }
    }
}

双指针

首位收缩问题

  1. 两数之和有序数组II:leetcode.cn/problems/tw…
  2. 盛最多的水:leetcode.cn/problems/co…

同起点

  1. 移动零:leetcode.cn/problems/mo…

回溯

动态规划

  1. 接雨水:leetcode.cn/problems/tr…