编程教程 · 实战

算法与数据结构:高频题型图解

2026-07-08· 约 7 分钟· 数组 · 哈希 · 双指针 · 二分
编程教程 算法 数据结构

算法题刷题不在多,在把「套路」吃透。下面三道是面试高频题,覆盖哈希、双指针、二分三大核心思想。

一、复杂度先搞清楚

O(n) 表示随数据量线性增长。能用一次遍历 + 哈希表解决的,就别用两层循环(O(n²))。判断复杂度是选算法的第一直觉。

二、两数之和(哈希表)

题目:给定数组和目标值,返回和为目标的两个下标。暴力法是双重循环,用哈希表把「见过的数 → 下标」存起来,一次遍历即可:

two_sum.py
def two_sum(nums, target):
    seen = {}
    for i, x in enumerate(nums):
        if target - x in seen:
            return [seen[target - x], i]
        seen[x] = i
    return []   # 时间 O(n),空间 O(n)

三、反转链表(双指针)

prevcur 两个指针,边遍历边把指向调头:

reverse.py
def reverse(head):
    prev, cur = None, head
    while cur:
        nxt = cur.next
        cur.next = prev
        prev, cur = cur, nxt
    return prev

四、二分查找

有序数组里找目标,每次砍掉一半,时间复杂度 O(log n)。注意边界:left <= rightmid 的更新。

binary.py
def search(a, target):
    left, right = 0, len(a) - 1
    while left <= right:
        mid = (left + right) // 2
        if a[mid] == target: return mid
        if a[mid] < target: left = mid + 1
        else: right = mid - 1
    return -1

五、刷题建议

  • 题型刷,而不是按编号刷——把一类套路练熟;
  • 先手写,再跑用例,最后看题解对比更优解法;
  • 定期复盘错题,比盲目冲数量有用。
提醒:算法是手段不是目的。理解思想、能讲清「为什么这样更快」,比背下某题代码更重要。