算法
此后无良辰
路漫漫其修远兮~
展开
-
输出所有的拓扑排序【此后无良辰】
拓扑排序对一个有向无环图(Directed Acyclic Graph简称DAG)G进行拓扑排序,是将G中所有顶点排成一个线性序列,使得图中任意一对顶点u和v,若边<u,v>∈E(G),则u在线性序列中出现在v之前。通常,这样的线性序列称为满足拓扑次序(Topological Order)的序列,简称拓扑序列。简单的说,由某个集合上的一个偏序得到该集合上的一个全序,这个操作称之为拓扑排序。常规方法由AOV网构造拓扑序列的拓扑排序算法主要是循环执行以下两步,直到不存在入度为0的顶点为止。(原创 2020-06-07 13:04:16 · 2293 阅读 · 2 评论 -
一道题解释二个栈实现队列功能【此后无良辰】
题面描述6.30每日一题基本思路使用两个栈一个栈q1用来进行插入操作一个栈q2用来进行删除操作每一次删除操作判断q2是否为空,为空则将q1数据全部压入q2不为空则返回top以下解说图来自于leetcode官方class CQueue {public: stack<int> q1; stack<int> q2; CQueue() { // while(!q1.empty()) q1.pop();原创 2020-06-30 09:32:22 · 143 阅读 · 0 评论 -
一道题解释前缀和+二分查找【此后无良辰】
题目描述基本思路1.暴力枚举法 o(n^2);class Solution {public: int minSubArrayLen(int s, vector<int>& nums) { int n = nums.size(); if (n == 0) { return 0; } int ans = INT_MAX; for (int i = 0; i < n;原创 2020-06-28 10:22:16 · 359 阅读 · 0 评论 -
一道题解释原地哈希【此后无良辰】
题目描述(Leetcode每日一题)基本思路1.此题如果没有空间限制可以使用普通哈希表功能记录2.此题如果没有时间限制可以使用二分查找把时间控制在nlonn但是这道题全有于是 今天学到一个别人自创的算法名字(也不知道是否权威)原地哈希因为哈希表其实也是数组,而当我们的输入数据的载体也是数组时,可以自行规定index和数据的关系对于这道题的关键·在于规定nums[nums[i]-1]=nums[i],也就是规定下标为i的数组放i+1的数怎么实现因为没有额外的o(n)的辅助空间,我原创 2020-06-27 10:24:08 · 399 阅读 · 1 评论 -
十大排序算法(附分类-对比-数据-代码)【此后无良辰】
分类图对比图数据图表数据全是随机数生成,测试三次取平均数单位毫秒所有的时间只是排序耗费的时间,不包括读入和输出例如 start = clock();//开始时间 radix_sort(data,n); printf("%lf\n",(double)(clock() - start) / CLK_TCK);//结束时间 - 开始时间可以看出在数据较大的时候,哪怕只是一个n与logn的数量级的时间相差也是非常恐怖的**------分界线--------------------原创 2020-06-21 15:19:00 · 248 阅读 · 0 评论 -
十大经典排序算法的复杂度
转载 2020-02-26 17:20:00 · 372 阅读 · 0 评论 -
关于二分搜索的点点滴滴的积累
此文章为转载他人二分查找二分查找算法,说白了就是在有序的数组里面给予一个存在数组里面的值key,然后将其先和数组中间的比较,如果key大于中间值,进行下一次mid后面的比较,直到找到相等的,就可以得到它的位置。前提:线性表中的记录必须是关键字有序(通常从小到大),线性表必须采用顺序存储。基本思想:取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键...转载 2019-12-14 11:38:47 · 123 阅读 · 0 评论 -
最短路径最基本的三种算法【此后无良辰】
floydfloyd(){ rep(k,1,n) rep(i,1,n) { // if(a[i][k]==maxn||i==k) continue; rep(j,1,n) { a[i][j]=min(a[i][j],a[i][k]+a[k][j]); } }}三重循环,k为枚举中间点方便简单,n3爆时间spfavoid spf...原创 2019-09-24 23:41:04 · 281 阅读 · 0 评论