目录
- 前言
- 数组
- 字符串
- 哈希表
- 链表
- 二叉树
-
- 17. 144. 二叉树前序遍历 (Binary Tree Preorder Traversal) - Easy
- 18. 145. 二叉树后序遍历 (Binary Tree Postorder Traversal)
- 19. 146. 二叉树中序遍历 (Binary Tree Inorder Traversal)
- 20. 102. 二叉树层序遍历 (Binary Tree Level Order Traversal) - Medium
- 21. 226. 翻转二叉树 (Invert Binary Tree) - Easy
- 22. 101. 对称二叉树 (Symmetric Tree) - Easy
- 23. 104. 二叉树的最大深度 (Maximum Depth of Binary Tree) - Easy
- 24. 111. 二叉树的最小深度 (Minimum Depth of Binary Tree) - Easy
- 25. 257. 二叉树的所有路径 (Binary Tree Paths) - Medium
- 26. 112. 路径总和 (Path Sum) - Easy
- 27. 113. 路径总和II (Path Sum II) - Medium
前言
本文参考力扣官网、以及该文章:https://zhuanlan.zhihu.com/p/632616380
本套题目涵盖了数组、字符串、哈希表、链表、二叉树等常见数据结构,以及二分查找、滑动窗口、深度优先搜索(DFS)、广度优先搜索(BFS)等经典算法。通过这些题目的学习,您将不仅掌握算法的基本原理,还能在实际编程中运用自如。
特别推荐小白读者尝试这些题目,因为它们将从零开始,引导您逐步深入算法的世界。相信学完这些题目后,您会对算法有豁然开朗的感觉,不仅能够在面试中应对自如,还能在未来的工作中更加得心应手。
数组
数组(Array)是一种用于存储多个相同类型元素的数据结构。在编程中,数组提供了一种便捷的方式来组织和访问大量数据。数组通常具有固定大小,每个元素在数组中都有一个唯一的索引,通过索引可以快速定位和访问数组中的元素。
1. 704. 二分查找 (Binary Search) - Easy
public class BinarySearch {
public int search(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (nums[mid] == target) {
return mid;
} else if (nums[mid] < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
return -1;
}
}
解析:
这段代码实现了经典的二分查找算法。下面是对这段代码的解析:
-
BinarySearch 类:这是一个 Java 类,用于实现二分查找算法。
-
search 方法:search 方法接受两个参数,一个是整型数组 nums,另一个是要查找的目标值 target。该方法返回目标值在数组中的索引,如果不存在则返回 -1。
-
left 和 right 变量:这两个变量分别表示当前查找范围的左右边界。初始时,left 指向数组第一个元素的索引 0,right 指向数组最后一个元素的索引 nums.length - 1。
-
while 循环:利用 while 循环进行二分查找,当 left 小于等于 right 时,继续查找。
-
mid 变量:计算中间位置 mid,通过 (left + right) / 2 或者 left + (right - left) / 2 这种方式避免整数溢出。
-
比较 nums[mid] 与 target:
- 如果 nums[mid] 等于 target,则找到目标值,返回 mid。
- 如果 nums[mid] 小于 target,则说明目标值在右侧,更新 left 为 mid + 1。
- 如果 nums[mid] 大于 target,则说明目标值在左侧,更新 right 为 mid - 1。
-
循环直到 left 大于 right,表示查找范围为空,此时返回 -1,表示未找到目标值。
这段代码实现了简洁高效的二分查找算法,时间复杂度为 O(log n),适用于有序数组的查找。在实际应用中,二分查找是一种常用且重要的算法,能够快速地定位目标值所在的位置,提高查找效率。
2. 27. 移除数组元素 (Remove Element) - Easy
public class RemoveElement {
public int removeElement(