算法
文章平均质量分 76
monkey_D_feilong
这个作者很懒,什么都没留下…
展开
-
KMP模式匹配算法
之前写过模式匹配的算法,写的比较随意粗糙,该算法考的蛮多的,记录下来方便以后查阅,归根到底,模式匹配法的核心就是跳表的生成了,具体参阅《算法导论》。#include #include using namespace std;class KMP{public: void set_Nexttable(const char *pattern,const int &size)//得到模原创 2016-06-02 11:14:40 · 440 阅读 · 0 评论 -
二叉搜索树的增删查
今天把搜索二叉树的思路又理了一遍,把代码又从头到尾敲了一遍,各位看客就不要在意代码粗糙和内存溢出了,主要把插入和删除的过程理了一遍,其中比较复杂的地方就是搜索二叉树的删除,涉及了很多次的指针重新指向,比较容易晕。另外,对于二叉树,在上溯的时候要特别注意根节点这个特殊的临界状态(大部分情况把根节点的父结点指向空,也可以设一个head结点,使root和head的父结点相互指向)。最后注意null结点不原创 2016-09-05 16:48:44 · 572 阅读 · 0 评论 -
实现strtok_r()函数
Linux中的字符串分段函数strtok()函数是不可重入和线程不安全的,所以后来又提供了相应的线程安全和可重入的函数strtok_r()函数,然而在window系统中对应的是strtok_r()函数,为了详细了解函数的代码结构,我按照相应的功能,自己编写了一个类似功能的字符串分割函数,代码如下,在vs2012中能够正常运行,如有错误还请指正!class mystrtok{public:原创 2016-08-25 20:48:42 · 801 阅读 · 0 评论 -
剑指offer(二)
源码如下://面试题3 二维数组的查找class two_demision_find{public: two_demision_find(int (*tem)[4],int n) { for(int i=0;i<n;i++) { vector str; for(int j=0;j<4;j++) { str.push_back(tem[i][j]);原创 2016-09-04 16:43:04 · 680 阅读 · 0 评论 -
leetcode算法题(一)
1、判断是否是颠倒字母顺序构成的字class Anagram {public: vector anagrams(vector &strs) { map > group; for (const auto &s : strs) { string key = s; sort(key.begin(), key.end()); group[key].push_back(转载 2016-08-24 15:40:07 · 427 阅读 · 0 评论 -
华为OJ算法题(一)
1、火车进站class train_station{public: void get_result() { int num=0; int tem=0; cin>>num; int size=num; while(size--) {原创 2016-08-24 15:19:07 · 784 阅读 · 0 评论 -
图的基本算法
图在程序开发中是一个比较重要的数据结构,其基本的算法如:广度优先(BFS)、深度优先(DFS)是图算法的基本入门算法,现在总结如下:#include #include #include using namespace std;struct node_edge{ int end_node_id; //终点结点的编号 int cost;//这条边的权值 node_edg原创 2016-08-30 20:08:44 · 460 阅读 · 0 评论 -
剑指offer二叉树等的操作(第四章)
今天把剑指offer第四章的内容学习了遍,按照自己的理解,编写代码如下:#include #include #include #include #include using namespace std;//面试题21:包含min函数的最小栈templateclass my_stack{public: void push(T t) { if(s1.empty原创 2016-07-21 17:13:31 · 684 阅读 · 0 评论 -
红黑树的插入操作详解(插入调整)
c++标准库中STL的关联容器(set、multiset、map、multimap)都是用的红黑树作为底层代码,而且红黑树在快速查找的结构里面用的比较多,想比于平衡二叉树,红黑树没有那么严格的限制条件(平衡二叉树要求结点的深度之差不超过1,而红黑树则没有这个限制),虽然红黑树是一种弱化的AVL树,但在数据查找效率方面依然不必AVL差,而且由于AVL的平衡条件要求比较严格,所以,当插入一个数据时,极原创 2016-07-20 20:16:13 · 1215 阅读 · 0 评论 -
重建二叉树
对二叉树有点了解的都知道,通过中序和任何遍历都可以唯一构建好一个二叉树,所以我们可以以中序和前序为例,来重建一棵二叉树:#include using namespace std;struct tree_node //树节点的结构体{ int m_data; tree_node *m_cright; tree_node *m_cleft;};class solution{原创 2016-07-09 15:15:17 · 418 阅读 · 0 评论 -
剑指offer面试题31、34、36、38
剑指offer面试题31、34、36、38代码如下://面试题31:连续子数组的最大和class Max_sum{public: int get_maxsum(int num[],int len) //(动态规划) { if(num==nullptr||len<=0) return NULL; vector> result(len,vector(len,0));原创 2016-07-28 16:25:39 · 487 阅读 · 0 评论 -
剑指offer常用链表操作
剑指offer中有很多的关于链表的操作,现总结如下:(对于单向链表,由于不能回溯,故比双向指针要更稍微复杂些)#include #include using namespace std;//单链表的数据结构struct List_node{ char data; List_node *next;};class List_solution{public: //创建链表原创 2016-07-16 17:04:15 · 508 阅读 · 0 评论 -
剑指offer面试题30:用自定义堆实现
保存数组的前k个最小值,剑指offer用的是STL中的multimap容器,我就通过自己实现一个最大堆来实现同样的效果,时间复杂度同样为O(nlogk),理解起来也比较简单,代码如下://找最小的k个数,用堆来操作class heap{public: void push(int num) { result.push_back(num); keep_heap(resul原创 2016-07-25 19:49:23 · 402 阅读 · 0 评论 -
剑指offer面试题28-29
实现剑指offer的面试题28、29://面试题28: 字符串的排列class Permutation{public: void get_permutation(char *str,char* begin) { if(str==nullptr) return; if(*begin == '\0') { cout<<str<<endl; return;原创 2016-07-25 17:16:40 · 358 阅读 · 0 评论 -
二叉树遍历算法
二叉树的遍历是个比较常用且经典的问题,它有递归和非递归的方式来实现三种遍历方式,递归的方式相对比较简单,这里主要用非递归的方式实现二叉树的三种遍历方式。#include #include #include using namespace std;//节点结构体 struct node{ char data;//数据域 node *left_child;//左孩子原创 2016-06-30 22:06:11 · 349 阅读 · 0 评论 -
常用排序算法详解
不论是工作还是平时学习,排序算法是非常重要的,显然对于大量数据,我们仅仅靠冒泡法来进行排序是远远不够的,虽然空间复杂度为o(n),但是时间复杂度为o(n^2),对于大量的数据来说是致命的缺陷,所以需要其他优秀的算法,比如用的比较多的快排、堆排序,插入排序,归并排序等等,STL中的Sort排序算法一般是几个算法结合起来,一般为了防止递归层次太深导致函数调用的时间花费,对于大于一定长度的数据,先进行几原创 2016-06-06 19:45:34 · 649 阅读 · 0 评论 -
中缀表达式转前缀和后缀表达式
之前笔试中国电信IT研发中心的时候,遇到了几个前、中、后缀表达式的相互转换,当时忘得差不多了,今天好好把该方面的知识好好复习,并把相关代码和思路自己缕了一遍:将中缀表达式转换为前缀表达式:遵循以下步骤:(1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;(2) 从右至左扫描中缀表达式;(3) 遇到操作数时,将其压入S2;(4) 遇到运算符时,比较其与S1栈顶运算符的优原创 2016-10-06 22:23:49 · 970 阅读 · 0 评论