![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
yyyzhhhhh
123
展开
-
海盗分金问题
https://zhuanlan.zhihu.com/p/109084661转载 2020-10-13 12:54:01 · 115 阅读 · 0 评论 -
矩阵旋转技巧
顺时旋转90度:沿右上角到左下角的对角线翻转,再上下翻转逆时针旋转90度:沿右上角到左下角的对角线翻转,再左右翻转顺时针旋转180度:先上下翻转,在左右翻转原创 2020-10-10 20:02:31 · 782 阅读 · 0 评论 -
数字右边第一个大于它的数(单调栈)
维护一个单调递减的栈,在新数字压栈前,可能需要弹出旧数字,这个新数字就是弹出的旧数字右边第一个比他大的数字。代码:vector<int> func(vector<int>& v){ vector<int> res(v.size(), -1); stack<int> st; st.push(0); for(int i = 1; i < len; i++){ while(!st.empty() && v[i] >原创 2020-10-09 23:18:23 · 1145 阅读 · 0 评论 -
排序的稳定性
https://www.cnblogs.com/Lis-/p/12577243.html不稳定:快排,堆排,选择:因为都涉及到交换稳定:插入,归并,冒泡原创 2020-09-20 01:10:37 · 70 阅读 · 0 评论 -
海量数据求中位数
参考:https://blog.csdn.net/randyjiawenjie/article/details/69685911.最简单:排序2.堆:4G数据,1G内存步骤:先将1G内存都塞进一个大顶堆,然后小于堆顶的数,插入堆,并pop堆顶,一次遍历后,得到第1G大的数;第二次遍历,过滤小于第1G大的数,同样塞满一个1G的大顶堆,小于堆顶的插入堆,并pop堆顶,得到第2G大的数字3.二分+统计比如数字范围是0-1000w那么统计0-500w和500w-1000w的数字个数,若0-500w的数原创 2020-09-11 00:44:41 · 694 阅读 · 0 评论 -
dfs求组合
1.结果无重复:a.无序:[1,3]和[3,1]是同一个结果:idx不从0开始b.有序:[1,3]和[3,1]不是同一个结果:idx从0开始2.不能使用同一元素:加visited数组原创 2020-09-05 17:32:22 · 127 阅读 · 0 评论 -
堆priority_queue的使用
priority_queue<ListNode*,vector<ListNode*>,decltype(cmp)> h(cmp);原创 2020-09-05 14:33:10 · 265 阅读 · 0 评论 -
最短路径算法:dijkstra算法
https://www.cnblogs.com/biyeymyhjob/archive/2012/07/31/2615833.html核心:记录每个点离原点的最短距离转载 2020-09-02 18:22:21 · 102 阅读 · 0 评论 -
最小生成树:prim和kruskal算法
https://zhuanlan.zhihu.com/p/34922624prim:以点集为对象,找最短的边kruskal:以边为对象,找最短的不形成环路的边转载 2020-09-02 18:20:41 · 167 阅读 · 0 评论 -
top K问题解决方案
1.使用最大最小堆。求最大的数用最小堆,求最小的数用最大堆。2.Quick Select算法。使用类似快排的思路,根据pivot划分数组。3.使用排序方法,排序后再寻找top K元素。4.使用选择排序的思想,对前K个元素部分排序。5.将1000…个数分成m组,每组寻找top K个数,得到m×K个数,在这m×k个数里面找top K个数。...原创 2020-09-01 10:43:28 · 176 阅读 · 0 评论 -
快速排序的优化
1.基准的选取:随机选、前中后选中值、前中后随机选2.短到一定长度后,使用插入排序void QuickSort(vector<int>& nums, int low, int high){ if(high==low) return; else if(high-low < 6) InsertSort(L, low, high); else { int temp = Partition(L, low,原创 2020-09-01 10:40:57 · 75 阅读 · 0 评论 -
翻转链表(迭代、递归)
迭代:开一个新链表,头插法ListNode* reverse(ListNode* root){ ListNode* head=nullptr,cur=root,nxt; while(cur!=nullptr){ nxt=cur->next; cur->next=head; head=cur; cur=nxt; } return head;}递归ListNode* reverse(ListNode* root){ if(!root-&原创 2020-09-01 10:37:59 · 66 阅读 · 0 评论 -
哈夫曼树
https://www.cnblogs.com/-citywall123/p/11297523.html转载 2020-08-29 18:18:07 · 152 阅读 · 0 评论 -
并查集
https://blog.csdn.net/qq_40663810/article/details/86908674https://baijiahao.baidu.com/s?id=1651803445417553212&wfr=spider&for=pc转载 2020-08-24 02:12:15 · 104 阅读 · 0 评论 -
线段树
主要应用是求数组某个区间的和,复杂度logNhttps://www.cnblogs.com/jason2003/p/9676729.html转载 2020-08-24 01:51:06 · 72 阅读 · 0 评论 -
不用第三个变量交换两个整数
https://blog.csdn.net/samjustin1/article/details/52138733转载 2020-05-15 01:30:53 · 166 阅读 · 0 评论 -
桶排序
桶排序有两种比如数的范围是[1,1000]1.第一种是分配1000个桶,统计每个数出现的次数2.第二种的分配100个桶(反正不是1000个),[1,10]分到第一个桶,[11,20]分配到第二个桶,以此类推。然后对每个桶内的数排序。时间复杂度:N个数,M个桶,平均一个桶N/M个数,比如用nlogn的方式排序,那么复杂度为N+M*(N/M)log(N/M) = N + logN - logM...转载 2020-04-25 11:40:21 · 98 阅读 · 0 评论 -
堆排序和快排谁更快
堆排序的交换次数比快排多,所以一般快排比堆排要快参考:https://blog.csdn.net/runrun117/article/details/80478211转载 2020-04-25 11:32:00 · 1168 阅读 · 0 评论 -
1~N不断去掉奇数项剩下的数
由于是不断去掉奇数项,保留偶数项,那么最后剩下的那个数的因子2数目一定最多,那么只要计算2^k <= N < 2^(k+1),剩下的那个数就是2^k原创 2020-04-25 01:02:33 · 1981 阅读 · 0 评论 -
一直生到男孩为止的男女比例
1:1原创 2020-04-23 16:40:33 · 1442 阅读 · 0 评论 -
25匹马5赛道前3快的马
最少7次https://blog.csdn.net/tobemlw/article/details/79038601转载 2020-04-23 16:39:32 · 293 阅读 · 0 评论 -
一条绳切两刀组成三角形的概率
1/4https://blog.csdn.net/hefenglian/article/details/82463746转载 2020-04-23 16:38:41 · 1473 阅读 · 0 评论 -
树的前中后序遍历的非递归实现
先序遍历vector<int> preorderTraversal(TreeNode* root) { if(!root) return {}; vector<int > res; stack<TreeNode* > s; s.push(root); while(!s.empty(...原创 2020-04-19 18:15:12 · 132 阅读 · 0 评论 -
快速排序和归并排序的递归实现和非递归实现
快排:递归实现:int partion(vector<int>& v,int low, int high){ int key = v[low];//中枢点//此时v[i]为空,待放入数据 //三值取中的优化,比较left,mid,right三个值,把中值和left进行swap即可 while(low < high){ whil...原创 2020-04-19 18:10:55 · 229 阅读 · 0 评论 -
游戏排行榜的实现
参考:https://www.zhihu.com/question/27933771/answer/2547539781.普通数组2.红黑树3.树状数组4.基于统计(桶排序)原创 2020-04-18 20:58:10 · 1103 阅读 · 0 评论 -
数组两元素最大的&和^
https://blog.csdn.net/Xu_JL1997/article/details/88735178转载 2020-04-17 23:48:27 · 144 阅读 · 0 评论 -
判断机器属于大端还是小端
大端:低位字节放高地址,高位字节放低地址小端:低位字节放低地址,高位字节放高地址比如int a = 0x12345678那么在小端中就是78 56 34 12在大端中就是12 34 56 78(地址从左往右表示从低到高)方法1int i = 1;char* p = (char*)&i;if(*p == 1) cout <<"小端"<<endl;el...原创 2020-04-17 22:44:59 · 218 阅读 · 0 评论 -
海量数据找到中位数(大堆+小堆)
参考leetcode的原题:查找字节流的中位数我们分别定义a_max,a_count,b_min,b_counta_max:表示字节流较小的那一半数字所组成的大顶堆(记为堆a)的堆顶a_count:表示上述大顶堆元素个数b_min:表示字节流较大的那一半数字所组成的小顶堆(记为堆b)的堆顶b_count:表示上述小顶堆元素的个数其中我们需要保证a_count = b_count或a_c...原创 2020-04-17 22:28:49 · 358 阅读 · 0 评论 -
解决哈希冲突的方法
1.拉链法2.开放地址法线性探查:1,2,3…二次探查:1,-1,4,-4,9,-9,…3.再哈希:用另外的哈希函数原创 2020-04-14 01:15:16 · 120 阅读 · 0 评论 -
用一个/两个队列实现栈
https://www.cnblogs.com/-xinxin/p/10725705.html原创 2020-04-14 01:07:28 · 72 阅读 · 0 评论 -
数组找出两个重复两次的数
https://www.cnblogs.com/warnon/p/4852534.html转载 2020-04-13 23:01:32 · 412 阅读 · 0 评论 -
8赛道,64匹马找最快的8匹马
https://blog.csdn.net/qq_43648751/article/details/103134357转载 2020-04-13 22:35:31 · 1685 阅读 · 0 评论 -
C++洗牌算法
void shuffle(vector<int>& v){ int n = v.size()-1; while(n){ //从下标[0,n]中随机挑选一个数,和v[n]交换(注意包括v[n]自己) int k = rand()%(n+1); swap(v[k],v[n]); --n; }}为...原创 2020-04-05 00:59:15 · 431 阅读 · 0 评论 -
rand5()得到rand3()或rand7()
其实原理都差不多,先将rand5()映射到一个比较大的区间,如扩大n倍,映射到[1,5*n],然后找一个子空间[1,3*m](对于rand7就是[1,7*m]),要求3*m/5*n的值尽可能接近1;产生一个[1,5*n]的随机数,若其位于[1,3*m]中,则可以将其映射到[1,3],若位于(3*m,5*n],则重新产生新的随机数。int Rand5(){ int m = rand()...原创 2020-04-05 00:42:15 · 2675 阅读 · 0 评论 -
大数据算法
1.大数据排序a.分治、归并b.位图(无重复)2.大数据top Ka.堆建立一个大小为k的堆,最大的k个数用小顶堆,最小的k个数据用大顶堆。以最大k个数和小顶堆为例,若数字小于堆顶,丢弃;若数字大于堆顶,丢弃堆顶,插入数字b.插入排序+二分建立一个大小为k的有序数组,对于第k+1以后的数,用二分找到插入的位置,若重复,则丢掉,若不重复,则丢掉数组第一个数字(最小数字)c.归并将...原创 2020-04-01 14:17:23 · 111 阅读 · 0 评论 -
dijkstra算法及使用堆进行优化
https://www.cnblogs.com/fusiwei/p/11390537.htmlhttps://en.wikipedia.org/wiki/Dijkstra%27s_algorithm原创 2020-03-24 01:55:09 · 169 阅读 · 0 评论 -
使用位图存储亿级QQ号
https://blog.csdn.net/hpugym/article/details/80008946原创 2020-03-19 00:40:26 · 1040 阅读 · 0 评论