Skip to content

Commit

Permalink
修改数据结构与算法
Browse files Browse the repository at this point in the history
  • Loading branch information
frank-lam committed Aug 2, 2021
1 parent c3f5ab2 commit 8e33f62
Show file tree
Hide file tree
Showing 8 changed files with 59 additions and 81 deletions.
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -421,7 +421,6 @@ Copyright (c) 2021-present, Frank Lam
</div>



<div align="center">
<p>
在颠覆世界的同时,也要好好关照自己。
Expand All @@ -434,5 +433,5 @@ Copyright (c) 2021-present, Frank Lam
from zero to hero.
</p>
</div>
<div align="center"> <img src="assets/wechat/wx-green.png" width="90%"/></div>
<div align="center"> <img src="assets/wechat/wx-green.png" width="70%"/></div>

1 change: 1 addition & 0 deletions notes/data-structures-and-algorithms/LeetCode.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# LeetCode
31 changes: 31 additions & 0 deletions notes/data-structures-and-algorithms/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
<div align="left"><img src="assets/logo7.svg" width="80px"/></div>

# 数据结构与算法

## 学习路径

| 部分 | 章节 | 概要 |
| :--- | :---------------------------------- | :--------------------------------------------------- |
|| [数据结构](数据结构.md) | 线性表、栈和队列、树和二叉树等经典数据结构 |
|| [算法思想](算法思想.md) | 排序算法、动态规划、递归、回溯法、贪心算法等经典算法 |
|| [LeetCode 题解](LeetCode 题解.md) | LeetCode 热题 HOT 100 |



## 参考资料

- 题库 - 力扣 (LeetCode) 全球极客挚爱的技术成长平台
https://leetcode-cn.com/problemset/all



## 学习课程

| 课程 | 推荐 |
| ------------------------------------------------------------ | ----------------------------------------- |
| [【慕课网】刘宇波:玩转数据结构,从入门到进阶](https://coding.imooc.com/class/207.html) | 数据结构从底层到实现,浅显易懂 |
| [【慕课网】刘宇波:程序员的内功修炼,学好算法与数据结构](https://coding.imooc.com/class/71.html) | 程序员的内功修炼,强烈推荐 |
| [【慕课网】刘宇波:玩转算法面试 leetcode题库分门别类详细解析](https://coding.imooc.com/class/82.html) | LeetCode 刷题入门,强烈推荐 |
| [【极客时间】覃超:算法面试通关40讲](https://time.geekbang.org/course/intro/130) | 市面上比较新的课程,推荐 |
| [【慕课网】刘宇波:看得见的算法 7个经典应用诠释算法精髓](https://coding.imooc.com/class/138.html) | 通过7款经典好玩游戏,真正将算法用于实际开 |

1 change: 1 addition & 0 deletions notes/data-structures-and-algorithms/assets/logo7.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
1 change: 1 addition & 0 deletions notes/data-structures-and-algorithms/assets/logo8.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Empty file.
2 changes: 2 additions & 0 deletions notes/data-structures-and-algorithms/算法思想.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# 算法思想

101 changes: 22 additions & 79 deletions notes/数据结构与算法.md
Original file line number Diff line number Diff line change
@@ -1,73 +1,6 @@
<!-- TOC -->

- [前言](#前言)
- [第一部分:数据结构](#第一部分数据结构)
- [一、线性表](#一线性表)
- [二、栈和队列](#二栈和队列)
- [三、树和二叉树](#三树和二叉树)
- [1. 红黑树](#1-红黑树)
- [2. 二叉树](#2-二叉树)
- [二分查找法](#二分查找法)
- [二叉树遍历](#二叉树遍历)
- [3. 二分搜索树](#3-二分搜索树)
- [深度优先遍历(前序、中序、后序遍历)](#深度优先遍历前序中序后序遍历)
- [广度优先遍历(层序遍历)](#广度优先遍历层序遍历)
- [4. AVL树](#4-avl树)
- [5. B和B+](#5-b和b)
- [四、字符串和数组](#四字符串和数组)
- [第二部分:算法思想](#第二部分算法思想)
- [一、排序](#一排序)
- [1. 选择排序(Selection Sort)](#1-选择排序selection-sort)
- [2. 插入排序(Insertion Sort)](#2-插入排序insertion-sort)
- [3. 冒泡排序(Bubble Sort)](#3-冒泡排序bubble-sort)
- [4. 希尔排序(Shell Sort)](#4-希尔排序shell-sort)
- [5. 归并排序(Merge Sort)](#5-归并排序merge-sort)
- [6. 快速排序(Quick Sort)](#6-快速排序quick-sort)
- [1. 普通快速排序](#1-普通快速排序)
- [2. 双路快速排序](#2-双路快速排序)
- [3. 三路快速排序](#3-三路快速排序)
- [7. 堆排序(Heap Sort)](#7-堆排序heap-sort)
- [1. 堆](#1-堆)
- [2. 上浮和下沉](#2-上浮和下沉)
- [3.插入元素](#3插入元素)
- [4. 删除最大元素](#4-删除最大元素)
- [5. 堆排序](#5-堆排序)
- [6. 堆排序的应用——Top K问题](#6-堆排序的应用top-k问题)
- [8. 计数排序和流排序](#8-计数排序和流排序)
- [9. 排序算法总结](#9-排序算法总结)
- [二、递归和回溯法](#二递归和回溯法)
- [1. 例题](#1-例题)
- [2. 排列问题](#2-排列问题)
- [3. 组合问题](#3-组合问题)
- [4. 回溯法的剪枝](#4-回溯法的剪枝)
- [5. 二维平面回溯法](#5-二维平面回溯法)
- [6. floodfill算法](#6-floodfill算法)
- [三、动态规划](#三动态规划)
- [1. 斐波那契数列](#1-斐波那契数列)
- [1.1 递归方式(自顶向下)](#11-递归方式自顶向下)
- [1.2 记忆化搜索(自底向上)](#12-记忆化搜索自底向上)
- [1.3 动态规划](#13-动态规划)
- [2. 背包问题](#2-背包问题)
- [(1)记忆化搜索](#1记忆化搜索)
- [(2)动态规划](#2动态规划)
- [(3)动态规划优化思路1](#3动态规划优化思路1)
- [(4)动态规划优化思路2](#4动态规划优化思路2)
- [(5)背包问题更多变种](#5背包问题更多变种)
- [3. 最长上升子序列](#3-最长上升子序列)
- [4. 最长公共子序列](#4-最长公共子序列)
- [四、贪心算法](#四贪心算法)
- [1. assign-cookies](#1-assign-cookies)
- [第三部分:面试指南](#第三部分面试指南)
- [1. 判单链表是否对称](#1-判单链表是否对称)
- [2. 合并两个有序数组成一个有序数组](#2-合并两个有序数组成一个有序数组)
- [3. 求二叉树中值为x的结点的层号](#3-求二叉树中值为x的结点的层号)
- [阿里面经OneNote](#阿里面经onenote)
- [第四部分:参考资料](#第四部分参考资料)

<!-- /TOC -->
# 前言

本文将系统总结算法面试和经典数据结构相关知识点,在这里分成 【数据结构】 和 【算法】 两部分展开。这里将展示主要的核心知识点,关于代码面试的Leetcode习题请转向代码仓库[Interview-code](https://github.com/frank-lam/interview_code)
本文将系统总结算法面试和经典数据结构相关知识点,在这里分成 【数据结构】 和 【算法】 两部分展开。这里将展示主要的核心知识点,关于代码面试的 Leetcode 习题请转向代码仓库[Interview-code](https://github.com/frank-lam/interview_code)



Expand All @@ -94,6 +27,8 @@
- 数组
- 链表



## 二、栈和队列


Expand Down Expand Up @@ -168,9 +103,9 @@ private static int searchDfs(int[] data, int l, int r, int target) {
}
```

#####

### 4.. 二叉树遍历

### 4. 二叉树遍历

#### 深度优先遍历(前序、中序、后序遍历)

Expand Down Expand Up @@ -300,6 +235,14 @@ public:



## 五、图结构

### 邻接矩阵

### 邻接表



# 第二部分:算法思想

## 一、排序
Expand Down Expand Up @@ -351,13 +294,15 @@ private static void swap(int[] arr, int i, int j) {

```java
public static void sort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j > 0; j--) {
if (arr[j] < arr[j - 1])
swap(arr, j, j - 1); // 大量的交换会消耗时间
else
break;
for (int i = 0; i < arr.length; i++) {
// 选择 arr[i...n) 中的最小值
int minIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
swap(arr, i, minIndex);
}
}

Expand Down Expand Up @@ -385,7 +330,7 @@ private static void swap(int[] arr, int i, int j) {

**算法分析**

插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
插入排序在实现上,通常采用 in-place 排序(即只需用到 O(1) 的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。



Expand Down Expand Up @@ -1676,12 +1621,10 @@ void level_in_x(BinTree BT,char x,int level)
# 第四部分:参考资料

- [数据结构与算法系列 目录 - 如果天空不死 - 博客园](http://www.cnblogs.com/skywang12345/p/3603935.html)
- [Interview-Notebook/算法.md at master · CyC2018/Interview-Notebook](https://github.com/CyC2018/Interview-Notebook/blob/master/notes/%E7%AE%97%E6%B3%95.md#%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F)
- [十大经典排序算法](https://www.cnblogs.com/onepixel/articles/7674659.html)
- [VisuAlgo - visualising data structures and algorithms through animation](https://visualgo.net/en)
- [Data Structure Visualization](https://www.cs.usfca.edu/~galles/visualization/Algorithms.html)
- [海量数据处理:十道面试题与十个海量数据处理方法总结 - chenhuan001 - 博客园](https://www.cnblogs.com/chenhuan001/p/5866916.html)




0 comments on commit 8e33f62

Please sign in to comment.