必会的算法
文章平均质量分 60
这些算法必须拿下!!!
没戴面具的小丑
一瓶快乐水,一包薯片,一台电脑,这日子过得相当享受呀~
展开
-
8. 经典的十大排序算法
#include <iostream>using namespace std;void printNum(int N, int num[]) { for (int i = 0; i < N; i++) { printf("%d ", num[i]); } printf("\n");}// 冒泡排序// 最差时间复杂度 ---- O(n^2)// 最优时间复杂度 ---- 如果序列在一开始已经大部分排序过的话,会接近O(n)// 平均时间复杂度 ---- O(.原创 2021-08-24 22:22:13 · 205 阅读 · 0 评论 -
10. 二分搜索
一,二分法(Binary Search)前提:线性表采取顺序存储结构(即适用于数组,不适用于链表),表中元素有序排列优点:因为是有序排列,故每次查询后可减少一半的搜索范围,时间复杂度是 O(log N)场景:寻找一个数,寻找左侧边界,寻找右侧边界。二,细节提醒不同的搜索场景下,有些变量的初始值以及终止条件是不同的。1, while (left < right) 还是 while (left <=...原创 2021-08-24 22:37:10 · 227 阅读 · 0 评论 -
9. 双指针技巧
双指针技巧包括 : 快慢指针 和 左右指针快慢指针多用于寻找数组或链表的中点。左右指针则用于确定数组的区间,一般在滑动窗口算法中使用较多。原创 2021-08-24 22:29:26 · 164 阅读 · 0 评论 -
7. 树的序列化与反序列化( 二叉树 和 N叉树 )
string serialize(TreeNode* root) { string str = (root == NULL) ? "NULL/" : ""; if (root) { queue<TreeNode*> queue; queue.emplace(root); while (!queue.empty()) { int size = queue.size(); ...原创 2021-08-18 23:37:48 · 1136 阅读 · 0 评论 -
6. N叉树的遍历
word 很大,你忍一下。可以先让洗衣机工作后再来阅读文章~一,回忆二叉树的遍历方式 : 前序遍历 : [根, [左子树], [右子树]] 中序遍历 : [[左子树], 根, [右子树]] 后序遍历 : [[左子树], [右子树], 根] 层序遍历 : 按照从上到下,从左到右的顺序,逐层遍历各个节点。...原创 2021-08-14 13:10:02 · 994 阅读 · 0 评论 -
5. 从遍历序列恢复二叉树
一,什么样的序列组合才能恢复一棵二叉树 ? 1,前序+中序 2,后序+中序 前序遍历的结果 [根节点, [左子树], [右子树]] 中序遍历的结果 [[左子树], 根节点, [右子树]] 后序遍历的结果 [[左子树], [右子树], 根节点] 所以若要恢复一棵二叉树,必须要包含 "中序遍历" 的结果,因为只有中序遍历中的左子树和右子树是分开的。 ...原创 2021-08-14 12:48:35 · 1310 阅读 · 0 评论 -
4. 二叉树的层序遍历 (levelOrder)
头文件: 用到的是前序遍历中的头文件,具体可参见 "二叉树的前序遍历"一,层序遍历的概念层序遍历实质是 广度优先搜索,按照层的顺序访问每个节点可以利用队列的性质,逐层访问二,层序遍历vector<vector<int>> levelOrder(TreeNode* root) { vector<vector<int>> ret; if (root) ...原创 2021-07-27 23:30:50 · 2059 阅读 · 1 评论 -
3. 二叉树的后续遍历 (postOrder)
头文件: 用到的是前序遍历中的头文件,具体可参见 "二叉树的前序遍历"一,后序遍历的概念后序遍历按照 左儿子-右儿子-根节点 的顺序访问二叉树方式1,递归遍历2,栈迭代遍历 (借助栈结构)3, Morris 遍历 (栈迭代的基础上优化空间复杂度)二,递归遍历/*递归遍历 先访问当前节点的左子树,然后再访问当前...原创 2021-07-27 23:29:53 · 1780 阅读 · 0 评论 -
2. 二叉树的中序遍历 (inOrder)
头文件: 用到的是前序遍历中的头文件,具体可参见 "二叉树的前序遍历"一,中序遍历的概念中序遍历按照 左儿子-根节点-右儿子 的顺序访问二叉树方式1,递归遍历2,栈迭代遍历 (借助栈结构)3, Morris 遍历 (栈迭代的基础上优化空间复杂度)二,递归遍历/*递归遍历 先访问当前节点的左子树,然后再访问当前...原创 2021-07-27 23:28:00 · 2677 阅读 · 0 评论 -
1. 二叉树的前序遍历 (preOrder)
头文件: 用来定义 TreeNode 以及随机获取一个二叉树,该头文件也用于后面的 中序 / 后序 / 层序 遍历。#ifndef __TREE_NODE_H__#define __TREE_NODE_H__#include <stdlib.h>#include <time.h>#define MIN_NUM 1#define MAX_NUM 10#define NUM_SIZE 10#define PRINT(vec) \ do { \ for (a原创 2021-07-27 23:26:52 · 2526 阅读 · 0 评论