算法
文章平均质量分 82
勤奋的伙计
这个作者很懒,什么都没留下…
展开
-
Course Schedule
原题:来自leetcode的https://leetcode.com/problems/course-schedule/There are a total of n courses you have to take, labeled from 0 to n - 1.Some courses may have prerequisites, for example to tak原创 2015-08-07 19:55:31 · 430 阅读 · 0 评论 -
Trie的实现
trie又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。实现方式:搜索字典项目的方法为:(1) 从根结点开始一次搜索;(2) 取得要查找关键词的第一个字母,并根原创 2015-08-09 15:19:58 · 401 阅读 · 0 评论 -
最长公共子序列问题
最长公共子序列问题是使用动态规划的典型应用:解决此问题需要定义二维辅助数组:dp[m+1][n+1]其基本公式:最后通过回溯,找到其公共子序列:回溯方法如下:此图摘自:http://blog.csdn.net/yysdsyl/article/details/4226630实例程序如下:#include#include#include#inc原创 2015-06-21 16:22:32 · 456 阅读 · 0 评论 -
不使用while,for,if等实现加法
不使用if, while,for,switch等实现从1到10的加法解:这里使用静态函数和静态变量实现,利用类似的方法也可以实现从1打印到1000class TheSum{public: TheSum(); static int GetSum();private: static int N; static int sum;};int TheSum::N=0;int Th原创 2015-07-22 09:26:56 · 808 阅读 · 0 评论 -
各种排序算法实现
1. 归并排序算法:非递归实现:void mergeSort(vector & nums, vector &tmpNums, int left, int right, int end)//right为右边一段数据的开始,同时也可以用来判断左边一段数据的结束,并且左边的数组长度总是大于或等于右边数组长度{ int idx_left=left; int idx_right=right;原创 2015-06-14 12:04:22 · 633 阅读 · 0 评论 -
二叉树后续遍历算法
二叉树后续遍历非递归算法:void BT_PostOrderNoRec(pTreeT root) { stack s; pTreeT pre=NULL; //pre指针是重点 while ((NULL != root) || !s.empty()) { if (NULL != root) { s转载 2015-08-18 21:57:34 · 740 阅读 · 0 评论 -
各种二分查找算法总结
1. 最基本的二分查找算法:在已排好序的vector中查找是否存在targetbool findData(vector &nums, int target){ if(nums.size()==0) return false; int low=0; int high=nums.size()-1; int mid; while(low<=high){ mid=(low+hig原创 2015-10-03 17:12:48 · 501 阅读 · 0 评论 -
最长连续公共子序列
在上一篇已经讲述过最长公共非连续子序列计算公式为:而对于最长公共连续子序列,实现的公式为:比较后,将数据的比较结果存放到二维数组中:实现代码为:时间复杂度和空间复杂度都是O(m*n)#include#include#include#includeusing namespace std;void longestComSubConstantSe原创 2015-06-21 17:20:37 · 1191 阅读 · 0 评论