1. 算法训练营首日实战解析
今天开始算法训练营的第一天,我们直接进入三个经典题目的实战:704二分查找、27移除元素和977有序数组的平方。这三个题目看似基础,但涵盖了算法学习中最关键的几个思维模式。我自己在刷题初期就曾在这几个题目上反复栽跟头,后来才明白它们其实是检验是否真正理解数组操作的标准试题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 704. 二分查找深度剖析
2.1 问题本质与边界陷阱
二分查找的题目描述很简单:给定一个升序数组和一个目标值,返回该目标值的索引,不存在则返回-1。但就是这个看似简单的题目,让无数初学者在边界条件上栽跟头。我见过最常见的错误就是while循环的条件写成left <= right还是left < right分不清,以及right = mid还是right = mid - 1的犹豫。
关键要理解搜索区间的定义:
- 左闭右闭区间
[left, right]:此时while条件应为left <= right,因为left == right时区间仍然有效 - 左闭右开区间
[left, right):此时while条件应为left < right,因为left == right时区间已无效
python复制# 左闭右闭写法
def search(nums, target):
left, right = 0, len(nums) - 1
while left <= right:
mid = left + (right - left) // 2
if nums[mid] < target:
left = mid + 1
elif nums[mid] > target:
right = mid - 1
else:
return mid
return -1
2.2 实战中的易错点
-
整数溢出问题:计算mid时使用
(left + right) // 2在极端情况下可能溢出,更安全的写法是left + (right - left) // 2 -
边界更新逻辑:一定要保持区间定义的一致性。如果初始区间是`[0, len(
