Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lilittlecat/algorithm-study-notes
我的算法学习笔记,部分内容来自互联网,并已标明出处,如有侵权,请联系删除。
https://github.com/lilittlecat/algorithm-study-notes
algorithms java leetcode
Last synced: 19 days ago
JSON representation
我的算法学习笔记,部分内容来自互联网,并已标明出处,如有侵权,请联系删除。
- Host: GitHub
- URL: https://github.com/lilittlecat/algorithm-study-notes
- Owner: LiLittleCat
- Created: 2020-08-17T10:50:36.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-01-17T11:12:02.000Z (almost 3 years ago)
- Last Synced: 2024-10-28T20:49:00.694Z (2 months ago)
- Topics: algorithms, java, leetcode
- Language: Java
- Homepage:
- Size: 21.5 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# :sparkling_heart: 算法学习笔记
我的算法学习笔记,部分内容来自互联网,并已标明出处,如有侵权,请联系删除。
本仓库遵循 [中文文案排版指北](https://github.com/sparanoid/chinese-copywriting-guidelines)。
## :thinking: 框架思维
整理自 [labuladong 的算法小抄](https://github.com/labuladong/fucking-algorithm)。
**数据结构的存储方式**
- 数组(顺序存储)
- 链表(链式存储)各种数据结构都是在数组或者链表上的特殊操作,底层都是数组或者链表实现的。
特点:
- 数组:可随机访问,相对节约空间;扩容、插入或删除时间复杂度 O(N)。
- 链表:不可随机访问,消耗更多空间;扩容、插入或删除时间复杂度 O(1)。**数据结构的操作**
- 遍历 + 访问
- 线性(迭代)
- 非线性(递归)**框架**
数组遍历框架(线性迭代)
```java
void traverse(int[] arr) {
for (int i = 0;i < arr.length;i++) {
// 迭代访问 arr[i]
}
}
```链表遍历框架(兼具迭代和递归)
```java
/* 基本的单链表节点 */
class ListNode {
int val;
ListNode next;
}void traverse(ListNode head) {
for (ListNode p = head;p != null;p = p.next) {
// 迭代访问 p.val
}
}void traverse(ListNode head) {
// 迭代访问 head.val
traverse(head.val);
}
```二叉树遍历框架(非线性递归)
```java
/* 基本的二叉树节点 */
class TreeNode {
int val;
TreeNode left, right;
}void traverse(TreeNode root) {
// 前序遍历
traverse(root.left);
// 中序遍历
traverse(root.right);
// 后序遍历
}```
N 叉树的遍历框架
```java
/* 基本的 N 叉树节点 */
class TreeNode {
int val;
TreeNode[] children;
}void traverse(TreeNode root) {
for (TreeNode child : root.children)
traverse(child);
}
```回溯算法框架
```java
result = []
def backtrack(路径,选择列表):
if 满⾜结束条件:
result.add(路径)
return
for 选择 in 选择列表:
做选择
backtrack(路径,选择列表)
撤销选择
```动态规划框架
```java
# 初始化 base case
dp[0][0][...] = base
# 进⾏状态转移
for 状态 1 in 状态 1 的所有取值:
for 状态 2 in 状态 2 的所有取值:
for ...
dp[状态 1][状态 2][...] = 求最值(选择 1,选择 2...)
```## :blue_book: LeetBook
- :sparkles:[初级算法](https://github.com/LiLittleCat/leetcode-solutions/blob/master/leetbook/top-interview-questions-easy.md)
-