返回首页

复杂度分析方法与陷阱

一、面试常考点

1. 如何分析循环

串行相加、嵌套相乘、递归看递推式。

2. 常见误区

忽略最坏情况、把均摊和单次复杂度混淆。

二、细节介绍

1. 递归复杂度

通过主定理或递推展开估算。

2. 均摊复杂度

如动态数组扩容,单次可能 O(n),均摊仍 O(1)。

三、示例代码

function binarySearch(arr, target) {
  let l = 0
  let r = arr.length - 1
  while (l <= r) {
    const mid = l + ((r - l) >> 1)
    if (arr[mid] === target) return mid
    if (arr[mid] < target) l = mid + 1
    else r = mid - 1
  }
  return -1
}
// 时间 O(log n), 空间 O(1)

四、常用应用场景

1. 方案选型

多方案取舍时用复杂度做第一层筛选。

2. 性能预估

上线前估算数据规模上限是否可承受。