![](https://img-blog.csdnimg.cn/20200317145219245.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
传统算法
主要介绍经常遇到的传统算法
xk-wang
努力成为一名优秀的算法工程师!
展开
-
二叉树前序中序后续遍历的栈实现
前两天遇到一道树的遍历题目,虽然说用递归写起来很快,但为了以防万一还是回忆了下之前学过用栈的方式实现。依稀记得第一次学习使用栈实现时,对前序和中序遍历理解很好,但是一直不能理解后续遍历的实现,今天又想了一会儿,发现自己也忘了先序和中序遍历的实现。我发现我会陷入由于根节点没有在合适的时机出栈造成遍历出现死...原创 2020-03-17 12:23:24 · 588 阅读 · 0 评论 -
最短路径算法
最短路径问题就是寻找从某个节点出发到其它所有节点的最短路径。最近突然又想到这个问题,就写写Dijkstra与Floyd算法的代码,这两种算法都是贪心算法。相比较于有向图,无向图的邻接矩阵是对称的,二者解法相同,为了便于描述,下面全部使用有向图。当存在负边时,Dijkstra失效。贪心算法:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加...原创 2020-03-14 22:01:10 · 849 阅读 · 0 评论 -
01背包问题初探
本文规划路径的寻找参见博客参考题目:背包容量为12,有物品1,2可供选择物品占用空间价值数量物品1235物品2342求在背包中装入价值最大的解决方案。思路:5个物品1可等价为5个物品,2个物品2可以等价为2个物品,这样一共有7个物品,转换为7个物品的0-1背包问题。对于第i个物品,背包问题的基本递推公式如下:Wi>W,装...原创 2020-02-25 22:53:25 · 202 阅读 · 0 评论 -
Jam字符串
jam数是指按字母表升序排列的字符串,例如acfgh。现要求找出满足如下要求的所有jam数的个数:输入:k, v, m字符串strs输出:比字符串strs大的jam字符串数量解释:k,v表示字符在字母表中的位置,a ~ z对应1~26,m和字符串strs的长度相同两个字符串A,B从左到右逐个字符按字母表比较,如果...原创 2020-02-25 11:09:59 · 161 阅读 · 0 评论 -
9种排序算法实现
#include<stdio.h>#include<stdlib.h>#include<math.h>void swap(int a[],int idx_i,int idx_j){ if(idx_i==idx_j) return; int t=a[idx_i];a[idx_i]=a[idx_j];a[idx_j]=t;}//选...原创 2019-05-25 18:26:31 · 187 阅读 · 0 评论 -
Complete Binary Search Tree(完全二叉搜索树)
Complete Binary Search TreeA Binary Search Tree (BST) is recursively defined as a binary tree which has the following properties:The left subtree of a node contains only nodes with keys less than th...原创 2019-05-12 17:20:16 · 356 阅读 · 0 评论 -
六度空间
六度空间“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样...原创 2019-05-12 13:25:51 · 3547 阅读 · 0 评论 -
拯救007
Saving James Bond - Easy Version挺有意思的一个题目,考察图的BFS或者DFS,这里我用DFS,写起来比较容易。This time let us consider the situation in the movie “Live and Let Die” in which James Bond, the world’s most famous spy, was c...原创 2019-05-12 09:51:53 · 240 阅读 · 0 评论 -
并查集的查找,归并操作
一般二叉树的结构是:数据域+左右孩子,指针域是指向孩子的,称为树的孩子表示法;但归并集往往是判断元素是否在同一个集合,因此构造的结构是:数据域+指针域,其中指针指向父节点,称为树的双亲表示法。并查集常常用来实现连接关系的传递性,例如A连接B,B连接C,那么并查集就可以实现A,B,C全部连接。原题PTAWe have a network of computers and a list of ...原创 2019-05-11 16:29:30 · 827 阅读 · 0 评论 -
AVL树的建立过程
原题PTAAVL树是一种平衡的二叉搜索树,每个节点的平衡因子绝对值小于等于1。分4种情况的旋转:RR右单旋LL左单旋LR旋转(通过先右旋再左旋解决)RL旋转(通过先左旋再右旋解决)题目An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two chi...原创 2019-05-10 19:22:23 · 2127 阅读 · 0 评论 -
判断二叉搜索树是否同构
原题来源PTA给定一个插入序列就可以唯一确定一棵二叉搜索树。然而,一棵给定的二叉搜索树却可以由多种不同的插入序列得到。例如分别按照序列{2, 1, 3}和{2, 3, 1}插入初始为空的二叉搜索树,都得到一样的结果。于是对于输入的各种插入序列,你需要判断它们是否能生成一样的二叉搜索树。输入格式:输入包含若干组测试数据。每组数据的第1行给出两个正整数N (≤10)和L,分别是每个序列插入元素的...原创 2019-05-10 18:07:36 · 227 阅读 · 0 评论 -
单链表原地逆序
02-线性结构2 Reversing Linked List转载于Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then y...转载 2019-05-10 14:04:57 · 1071 阅读 · 0 评论 -
c语言实现快排
c语言实现快排课本上的讲法是选取第一个作为key值,然后i,j从第二个和最后一个开始,当找到a[i]>key和a[j]<key时就将他们交换,最终效果如下。但这样后面要把key值恢复到中间又得进行n/2次的搬移,感觉有些麻烦。于是发现了csdn上前辈的解法链接使用“挖坑法”+“二分法”解决,挺巧妙的,细节也处理的很好。void quickSort(int a[],int lef...原创 2019-04-10 11:22:08 · 3332 阅读 · 0 评论 -
c语言实现快排
c语言实现快排课本上的讲法是选取第一个作为key值,然后i,j从第二个和最后一个开始,当找到a[i]>key和a[j]<key时就将他们交换,最终效果如下。但这样后面要把key值恢复到中间又得进行n/2次的搬移,感觉有些麻烦。于是发现了csdn上前辈的解法链接使用“挖坑法”+“二分法”解决,挺巧妙的,细节也处理的很好。void quickSort(int a[],int lef...原创 2019-04-10 11:22:08 · 1263 阅读 · 0 评论 -
由树的中序遍历栈操作写出后序遍历结果
中序遍历栈求后续遍历题目描述思考过程思路1代码1附:栈实现二叉树后序遍历思路2代码2思路3代码3题目描述PTA题目思考过程由二叉树的遍历知识知道根据中序和先序遍历可以确定后序遍历,中序和后序可以确定先序遍历,而先序和后续无法确定中序(因为先序:根左右,后序:左右根,无法分清左右子树的边界)。思路1直接由push和pop过程可以建立二叉树,然后再写后序遍历。构造树的结构:静态链表...原创 2019-03-30 22:10:59 · 1068 阅读 · 0 评论