![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
其他算法
ME815580352
这个作者很懒,什么都没留下…
展开
-
双栈排序
题目描述请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector&ltint>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。测试样例:[1,2,3,4,5]返回:[5,4...原创 2018-08-21 10:30:13 · 184 阅读 · 0 评论 -
链表快排
题目描述编写代码,以给定值x为基准将链表分割成两部分,所有小于x的结点排在大于或等于x的结点之前给定一个链表的头指针 ListNode* pHead,请返回重新排列后的链表的头指针。注意:分割以后保持原来的数据顺序不变。 思路:分成两个链表。然后再合并成一个,将原来的链表中大于给定值的节点债下来串联形成一个新的链表,最后将两个链表合并/*struct ListNode {i...原创 2018-08-21 10:38:05 · 239 阅读 · 0 评论 -
背包问题变种
0-1背包:n道数学题分值为A[I] A[2] A[3].....A[N] 1<=A[i]<=100 求怎么拼凑得到100分,一共需要多少道题目,分别是哪些题目输入:3 10 30 60 输出:3 1 2 3int main(){ int n = 0; while (cin >> n&&n>0){ ...原创 2018-08-21 15:09:02 · 1203 阅读 · 0 评论 -
求C(n,m)的值
递归版本,利用公式c(n,m)=c(n-1,m)+c(n-1,m-1)意义: 从n里面取m的方法,一种是取了当前元素,那么再从剩下的n-1个里面取m-1个(因为已经取了一个),另一种是没有取当前元素,那么再从剩下的n-1个里面取m个int combine1(int n, int m){ if (n < m)return -1; if (m == 0)return 1; if ...原创 2018-08-21 15:51:08 · 2102 阅读 · 0 评论 -
(元素不重复的)集合中元素的组合__深搜
考虑一颗搜索树,对搜索树的所有路径进行遍历得到结果。搜索树的每个分支考虑的是选取或者不选取当前元素void combine(int n, int depth,vector<vector<int>>& result,vector<bool>& visit){ if (depth >= n){ vector<int> t...原创 2018-08-21 15:58:11 · 574 阅读 · 0 评论 -
全排列
深搜:每次从剩下的没有被选择过的元素中选择一个元素放在当前位置,然后继续按同样的方法确定下一个位置的元素,知道所有的元素都被选择过则完成一次排列void Permutation(string& str, string& path, int depth,set<string>& result,vector<bool>& visit){/...原创 2018-08-25 09:11:38 · 118 阅读 · 0 评论 -
最长递增子序列
是子序列,因此可以不连续,运用动态规划https://segmentfault.com/a/1190000012748540思想:某一个元素处的最长递增子序列是,他前面,比他小的元素,的最长递增子序列的长度加一中最大的。最后所有元素的最长递增子序列中最大的就是最后的结果int max_asc_sub(vector<int>& data){ int n = dat...原创 2018-09-14 17:20:08 · 101 阅读 · 0 评论