1. LeetCode热题100深度解析(三)
作为程序员面试的"金标准",LeetCode题目往往能真实反映一个开发者的算法思维和编码能力。今天我将分享自己在刷LeetCode热题100过程中的解题思路和优化心得,这些题目覆盖了二叉树、二分查找、动态规划等高频考点。不同于简单的题解罗列,我会重点剖析每道题目的思考过程、常见误区以及性能优化技巧。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 二叉树与递归问题实战
2.1 有序数组转二叉搜索树(#108)
这道题要求我们将升序数组转换为高度平衡的二叉搜索树。初次看到题目时,我陷入了如何保证"高度平衡"的困惑中。经过分析发现:
二叉搜索树的中序遍历就是升序序列,因此数组的中间元素自然就是树的根节点
这个性质是解题的关键。通过递归地将数组分为左右两部分,可以构建出平衡的BST:
java复制public TreeNode sortedArrayToBST(int[] nums) {
return buildNode(nums, 0, nums.length - 1);
}
private TreeNode buildNode(int[] nums, int left, int right) {
if (left > right) return null;
int mid = left + (right - left) / 2; // 防止整数溢出
TreeNode node = new TreeNode(nums[mid]);
node.left = buildNode(nums, left, mid - 1);
node.right = buildNode(nums, mid + 1, right);
return node;
}
注意事项:
- 计算mid时使用
left + (right - left)/2而非(left + right)/2,避免整数溢出 - 递归终止条件是left > right而非left == right,因为当区间长度为1时仍需处理
- 时间复杂度O(n),每个节点只被访问一次
3. 二分查找的巧妙应用
3.1 搜索插入位置(#35)
这道基础二分查找题要求我们在有序数组中找到目标值的插入位置。我的第一版实现虽然能通过测试,但存在几个问题:
java复制// 初始冗长实现
public int searchInsert(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left < right) {
int mid = (left + right) / 2;
if (nums[mid] < target) {
left = mid;
} else if (nums[mid] > target) {
right = mid;
} else {
return mid;
}
if (le
