Skip to content

数组算法题分类解析

1. 双指针

类型特点:通常用于处理有序数组或需要原地修改的问题。通过两个指针(同向或相向)协作,将 O(n²) 的暴力解法优化至 O(n)。

难度题目题号核心思路简介
简单删除有序数组中的重复项26快慢指针,慢指针维护无重复区间
简单移除元素27快慢指针,将与目标值相等的元素移除
简单合并两个有序数组88从后往前双指针,避免覆盖原数组元素
中等盛最多水的容器11左右指针向中间移动,每次移动高度较小的指针
中等三数之和15排序后,固定一个数,再用双指针寻找另外两个数

2. 滑动窗口

类型特点:用于寻找满足特定条件的连续子数组,如“最长子数组”、“最小子数组”。

难度题目题号核心思路简介
中等长度最小的子数组209窗口和小于目标时右移右指针,大于等于时尝试左移左指针
中等无重复字符的最长子串3用哈希记录窗口内字符,右指针移动时发现重复则左指针收缩

3. 前缀和 & 哈希表优化

类型特点:频繁需要计算子数组的和或统计满足特定和条件的子数组个数。

难度题目题号核心思路简介
中等和为 K 的子数组560计算前缀和,用哈希表存储前缀和出现的次数,查找 当前前缀和 - k 的次数
中等除自身以外数组的乘积238用前缀积和后缀积(或两次遍历),当前位置结果 = 左边乘积 * 右边乘积

4. 二分查找

类型特点:数组通常是有序的,或者题目要求时间复杂度为 O(log n)。

难度题目题号核心思路简介
简单搜索插入位置35标准二分查找,寻找第一个大于等于目标值的下标
中等在排序数组中查找元素的第一个和最后一个位置34两次二分查找,分别寻找左边界和右边界
中等搜索旋转排序数组33先判断哪一部分有序,再根据目标值决定搜索哪一半
困难寻找两个正序数组的中位数4在两个有序数组中用二分法找到一条分割线,使左右两部分元素个数相等且满足大小关系

5. 贪心算法

类型特点:求最值问题,且局部最优解可以推导出全局最优解。

难度题目题号核心思路简介
中等跳跃游戏55维护当前能到达的最远距离,判断是否能走到终点
中等加油站134如果总油量大于等于总消耗,则从某个点出发一定能成功。从起始点累加剩余油量,若小于0则更新起始点

6. 动态规划

类型特点:求最值、方案数或可行性问题,且问题可以被分解为重叠的子问题。

难度题目题号核心思路简介
简单爬楼梯70dp[i] = dp[i-1] + dp[i-2]
中等最大子数组和53dp[i] 表示以 i 结尾的连续子数组最大和,状态转移为 max(dp[i-1]+nums[i], nums[i])
中等不同路径62二维DP,dp[i][j] = dp[i-1][j] + dp[i][j-1]
中等打家劫舍198dp[i] 表示偷到第 i 家时的最大金额,考虑偷或不偷当前这家

7. 矩阵操作

类型特点:将一维数组的概念扩展到二维矩阵,考察坐标变换和模拟能力。

难度题目题号核心思路简介
中等螺旋矩阵54按层(上、右、下、左)模拟遍历,注意边界条件
中等旋转图像48先按对角线翻转,再按行翻转
中等矩阵置零73用第一行和第一列作为标记位,原地修改

8. 进阶技巧

类型特点:通常为困难题,需要用到特殊的数据结构或算法思想,是对前面基础知识的综合运用。

难度题目题号核心思路简介
困难接雨水42方法多样:动态规划(找左右最大值)、双指针、单调栈
困难数组中的逆序对剑指 Offer 51归并排序的分治思想,在合并过程中统计
困难寻找重复数287将数组视为链表,用快慢指针找环入口;或用二分法按值搜索

刷题建议

  1. 由浅入深:先从“双指针”和“二分查找”的简单题入手,建立信心。
  2. 掌握模板:重点攻克“滑动窗口”和“前缀和”,这两类题的代码框架非常固定,性价比很高。
  3. 思维提升:带着状态转移方程的思想去练习“动态规划”,这是面试中的分水岭题型。
  4. 查漏补缺:当遇到难题时,可以参考题解区的“官方题解”或高赞回答,学习最优解法的思路。

Released under the MIT License.