![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
王大凤
没有简介
展开
-
排序法总结
冒泡排序法 从低到高慢慢扩大已排序部分。找到未排序部分的第一个位置,然后从数组末尾开始依次比较相邻两个元素,如果大小关系相反则交换位置。这样可以保证每次都把最小的那个换到最前面。如果某一次没有元素交换,则表示排序完成。例题:Bubble Sort输入n和数组,输出排序后的数组和交换次数。交换次数即逆序数int exchange = 0; //交换次数...原创 2018-03-23 20:43:55 · 151 阅读 · 0 评论 -
基础数据结构——Stack, Queue, Vector, List
栈(Stack)数组实现方式:/***top表示当前的元素位置***/initialize() top = -1;inEmpty() return top == -1;isFull() return top == Max - 1;push(x) if isFull() error(); top++; S[t...原创 2018-03-25 00:14:33 · 249 阅读 · 0 评论 -
查找——线性查找,二分查找,散列法
线性查找A.linearSearch() for i from 0 to n - 1 if (A[i] == key) return i return NOT FOUNDB.linearSearch() i = 0 A[n] = key; while (A[i] != key) i++...原创 2018-03-26 13:27:32 · 1428 阅读 · 0 评论 -
经典DP——LCS,LIS……
最长递增子序列(LIS)O(n2O(n2O(n^2)算法 设a[i]为给定序列的第i个元素的值,dp[i]表示以第i个元素结尾的最长递增子序列长度 - 状态转移方程:dp[i] = max{dp[i], dp[j] + 1} (a[i] > a[j] && i > j)O(n2O(n2O(n^2)代码模板for (i=1; i&...原创 2018-03-26 16:41:31 · 198 阅读 · 0 评论 -
二叉树的重建
例题1:题目大意:VJ题目链接(这个判定有问题,好像不能判……所以代码不一定正确)现有两个结点序列,分别是对同一个二叉树进行前序遍历和中序遍历的结果。编写程序,输出该二叉树按后序遍历时的结点序列。输入:1:输入二叉树结点数n 2:输入前序遍历结点编号序列 3:输入中序遍历结点编号序列输出:输出后序遍历结点编号序列思想:按preorderpreor...原创 2018-04-13 21:54:31 · 193 阅读 · 0 评论 -
剑指offer部分题解(1)
A. 把数组排成最小的数题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路将整数转换成字符串假设字符串a,b,有连接字符串ab和ba,则按照连接方式的大小为排序方式从小到大排序注意点cmp数组必须定义为static。因为类里,cm...原创 2018-05-19 23:30:30 · 143 阅读 · 0 评论 -
剑指offer部分题解(2)
二叉树的深度题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。思路递归回溯/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) :...原创 2018-05-20 21:13:59 · 134 阅读 · 0 评论 -
二叉树
概念二叉树:n个数据元素的有限集,它或为空集(n = 0),或者含有唯一的称为根的元素,且其余元素分成两个互不相交的子集,每个子集自身也是一棵二叉树,分别成为根的左子树和右子树。集合为空的二叉树成为空树,二叉树中的元素也成为结点。层次:根所在层次为1,二叉树中叶子结点的最大层次数定义为二叉树的深度。满二叉树:二叉树中所有的分支结点的度数都为2,且叶子结点都在同一层次中。完全二叉树:一棵...原创 2018-05-23 19:24:19 · 524 阅读 · 2 评论 -
堆和优先级队列
概念二叉堆:如果一棵完全二叉树各节点的键值与一个数组的元素具备一一对应的对应关系,那么这个完全二叉树就是二叉堆。堆用数组存储键值。设结点为x,则父结点下标为floor(x >> 1),左子节点为 2 * x, 右子节点为2 * x + 1.最大堆:父结点的键值大于等于左右子节点的键值。最小堆:父结点的键值小于等于左右子节点的键值。基本操作参考博客:JVxie的...原创 2018-06-09 21:20:22 · 1030 阅读 · 0 评论