- 博客(17)
- 收藏
- 关注
原创 Two ways of implementation for Topological Sort
1. Use a stack#define V 5void TopologicalSortUtil(int v,vector<vector<int>> adj,vector<bool>& visited,stack<int>& s){ visited[v]=true; for(int it: adj[v]){...
2018-08-16 07:42:25 202
原创 c++ priority_queue和sort自定义
/** * Definition for an interval. * struct Interval { * int start; * int end; * Interval() : start(0), end(0) {} * Interval(int s, int e) : start(s), end(e) {} * }; */struct ...
2018-08-07 11:50:28 371
翻译 【LeetCode 4】 Median of Two Sorted Arrays
翻译自高赞答案https://leetcode.com/problems/median-of-two-sorted-arrays/discuss/2481/Share-my-O(log(min(mn))-solution-with-explanation要解决这个问题首先得理解中位数的概念,中位数将集合划分成两个等长的部分,且后半部分的元素都大于等于前半部分的元素。首先我们选择一个随机...
2018-07-13 11:18:22 231
原创 找到重复的元素(Finding Repeated Elements)
leetcode Majority Element系列的解法讨论,参考文献http://www.cs.utexas.edu/users/misra/scannedPdf.dir/FindRepeatedElements.pdf摩尔众数投票算法(Boyer-Moore majority vote algorithm)用法:找出一个序列中的众数。时间复杂度:O(n)空间复杂度:O(1)最简单形式的该算...
2018-07-13 00:04:08 885
原创 最长上升子序列(Longest Increasing Subsequence Size)
整理自geeksforegeeks问题描述:在一个数字随机排列的数组中找到最长的递增子序列。解决方案1. 动态规划(Dynamic Programming)最优子结构:令arr[0...n-1]是输入数组,L(i)是以arr[i]为结尾的子串中的LIS长度。那么我们可以总结出以下的规律:if (0<j<i && arr[j]<arr[i]) L(i)=1+max(...
2018-07-12 11:48:25 1335 1
原创 Morris Traversal
Morris Traversal的时间复杂度是O(n),空间复杂度O(1),利用了线索二叉树的思想。使用Morris Traversal进行中序遍历的具体算法步骤总结如下:1. 将根结点root设为当前结点cur。2. 找到二叉树中以中序遍历时当前结点cur的前驱结点prev。如果当前结点没有前驱结点,便输出当前结点,并将当前结点的右孩子设置为当前结点;如果当前结点有前驱结点便进行3。3. 判断该...
2018-07-06 17:11:54 376
转载 斐波那契堆
原作地址:https://www.cnblogs.com/dongkuo/p/7623882.html1. 写在前面在很久之前学习过堆这种数据结构。这次再来学习一种比较特别的“堆”——斐波那契堆。下文首先会介绍斐波那契堆的结构,然后会介绍在其上的操作,最后再分析这些操作的效率,以及一些理论的证明。2. 结构斐波那契堆是一系列具有最小堆序的有根树的集合,即斐波那契堆中的每棵树均遵循最小堆性质。所谓最...
2018-06-12 23:33:55 1020
原创 最大流(Maximum Flow)
《算法导论》最大流学习笔记一、流网络G=(V,E)是一个有向图,其中每条边(u,v)有一个非负的容量值c(u,v),而且如果E中包含一条边(u,v),那么图中就不存在它的反向边。在流网络中有两个特殊的结点,源结点s和汇点t。下面给出流网络的形式化定义。令G=(V,E)为一个流网络,其容量函数为c,设s我为网络的源点,t为汇点。G中的流是一个实值函数f,满足以下两条性质:1. 容量限...
2018-06-12 20:02:46 45879 4
原创 所有结点对的最短路径问题(All-Paris Shortest Paths)
《算法导论》所有结点对的最短路径问题学习笔记我们已经讨论了单源最短路径问题,在这篇博客中我们将求解一个图中所有节点之间的最短路径。一、最短路径和矩阵乘法分析可知在一个图中一条最短路径的所有子路径都是最短路径,很容易想到我们可以使用动态规划的思路来解决这个问题。设为从i到j的一条最短路径,且这条路径最多包含m条边。我们可以得到以下的递推公式:依据上面的递推公式我们可以编写代码如下,注意这里实现的是已...
2018-06-12 10:35:26 7501
原创 单源最短路径(single-source shortest path )
《算法导论》单源最短路径笔记问题描述:给定一个图G=(V,E),我们希望找到从给定源结点到每个结点v的最短路径解决思路:两个结点之间的一条最短路径包含着其他的最短路径。注:最短路径不能包含权重为负值的环路。当图中不含负权重边的时候我们可以使用Dijkstra算法来找到所有从源结点出发最短的路径。当图中含有负权重边的时候我们使用效率低一些的Bellman-Ford算法,在找寻最短路径的同时不断判断图...
2018-06-11 22:32:58 5581 1
翻译 最大子数组问题(Maximum subarray problem)
最大子数组问题(Maximum subarray problem)参考:Wikipedia最大子数组问题就是在一个一维的数组中找到和最大的一个连续的子数组。给定的数组一般包括正数负数和0。这个问题的一些属性如下:1....
2018-06-09 19:40:22 512
原创 动态规划(dynamic programming)与贪心算法(greedy algorithm)
《算法导论》动态规划笔记动态规划的方法是付出额外的内存空间来节省计算时间,是典型的时空权衡(time-memory trade-off)的例子。时间上的节省可能是非常巨大的,有可能将指数时间的解转化为多项式时间的解。应用动态规划方法求解的优化问题应该具备的两个要素:最优子结构和子问题重叠。最优子结构:如果一个问题的最悠久包含其子问题的最优解,我们就称此问题具有最优子结构性质。对于不同问题领域,最优...
2018-06-07 11:00:26 1343
原创 几种常见排序算法总结
常见排序算法总结:插入排序选择排序快速排序堆排序希尔排序排序算法衡量标准:稳定性时间、空间复杂度一、插入排序(insertion sort)实际运行时间,更多地取决于输入序列所含逆序对的总数 template <typename T> void List <T>:: insertionSort( Posi(T) p, int n){ for(int r=0;r&l...
2018-06-03 23:35:00 169
原创 leetcode Sum系列
Two SumGiven an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the ...
2018-06-03 19:56:36 231
翻译 c++ map和unordered_map比较
http://thispointer.com/map-vs-unordered_map-when-to-choose-one-over-another/在这篇文章中我们将对std::map与std::unordered_map进行比较,并解释什么时候该选用哪一种。两种结构都以键值对的形式存储元素,并且提供成员函数来协助高效地插入,查询和删除键值对。但是他们在以下的几个方面有区别:内部实现内存使用时...
2018-06-03 15:42:07 3056
原创 C++复习笔记
基于对象的程序设计面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。class 类名{ private: 私有的数据和成员函数; public: 共有的而数据和成员函数;}member access specifier: private, public, protected一个C++程序是由3个部分组成的:(1)类声明文件(后缀为.h)(2)类实现文件(后缀为.cp...
2018-06-02 18:36:57 237
原创 C++STL库常用数据结构用法整理
vector创建对象,vector<int> vec;尾部插入数字,vec.push_back(a);使用下表访问元素使用迭代器访问元素插入元素删除最后一个元素,vec.pop_back()queue定义一个queue的变量 queue<Type> M查看是否为空范例 M.empty()从已有元素后面增加元素 M.push()输出现有元素的个数 M.size()显示第一个...
2018-06-02 18:33:56 3799
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人