中等题清单

一句话说明

中等题真正考的是“你能不能快速识别题型并选对套路”,而不是把代码写长。

重点专题

  • 双指针与滑动窗口
  • 二分查找变体
  • DFS / BFS
  • 回溯
  • 一维 / 二维 DP
  • 链表综合操作

典型题型

专题代表题关键词
数组三数之和、合并区间排序、双指针
链表删除倒数第 N 个、重排链表快慢指针
树层序遍历、构造树、LCA递归、BFS
DP最长回文、零钱兑换、LIS状态定义
回溯全排列、组合总和剪枝、去重

一个代表性 Go 模板:三数之和

func threeSum(nums []int) [][]int {
    sort.Ints(nums)
    result := [][]int{}
 
    for i := 0; i < len(nums)-2; i++ {
        if i > 0 && nums[i] == nums[i-1] {
            continue
        }
        left, right := i+1, len(nums)-1
        for left < right {
            sum := nums[i] + nums[left] + nums[right]
            if sum == 0 {
                result = append(result, []int{nums[i], nums[left], nums[right]})
                for left < right && nums[left] == nums[left+1] {
                    left++
                }
                for left < right && nums[right] == nums[right-1] {
                    right--
                }
                left++
                right--
            } else if sum < 0 {
                left++
            } else {
                right--
            }
        }
    }
 
    return result
}

一个代表性 Go 模板:二维 DP

func uniquePaths(m, n int) int {
    dp := make([][]int, m)
    for i := range dp {
        dp[i] = make([]int, n)
        dp[i][0] = 1
    }
    for j := 0; j < n; j++ {
        dp[0][j] = 1
    }
 
    for i := 1; i < m; i++ {
        for j := 1; j < n; j++ {
            dp[i][j] = dp[i-1][j] + dp[i][j-1]
        }
    }
    return dp[m-1][n-1]
}

刷题建议

  • 中等题要开始系统做专题总结
  • 一道题至少想清楚“状态 / 不变量 / 去重规则”
  • 如果一种题型连续错两次,就应该回到模板页重练

返回:LeetCode题解