【旧】数据结构与算法
文章平均质量分 93
介绍数据结构与算法
猴子居士
这个作者很懒,什么都没留下…
展开
-
练习:排序
桶排序我的代码:// C++ program to sort an array using bucket sort#include <iostream>#include <algorithm>#include <vector>using namespace std;// Function to sort arr[] of size n...原创 2018-08-21 12:05:15 · 194 阅读 · 0 评论 -
练习:敲打代码
希尔排序我的代码:#include <iostream>using namespace std;void shell_sort(int a[], int len) { for(int h = len/2;h > 0;h /= 2) { for(int i = h;i < len;i++) { int tmp...原创 2018-08-21 12:02:42 · 216 阅读 · 0 评论 -
练习:动态规划的套路
动态规划的三大步骤动态规划,无非就是利用历史记录,来避免我们的重复计算。而这些历史记录,我们得需要一些变量来保存,一般是用一维数组或者二维数组来保存。下面我们先来讲下做动态规划题很重要的三个步骤。如果你听不懂,也没关系,下面会有很多例题讲解,估计你就懂了。第一步骤:定义数组元素的含义。上面说了,我们会用一个数组,来保存历史数组,假设用一维数组 dp[] ,这个时候有一个非常重要的点,就是规定你这个数组元素的含义,例如你的 dp[i] 是代表什么意思?第二步骤:找出数组元素之间的递推关系式。动态规划,原创 2021-03-12 21:56:01 · 508 阅读 · 0 评论 -
练习:求字符串中最长连续子串
自字符串中最长连续子串#include &amp;lt;iostream&amp;gt;#include &amp;lt;string&amp;gt;using namespace std;/*void func(const string&amp;amp; str, string&amp;amp; res) { int curIndex = 0; int maxIndex = 0;原创 2018-08-09 20:32:34 · 2548 阅读 · 0 评论 -
练习:时间复杂度
时间复杂度(大O)(很好)原文博客:https://blog.csdn.net/u014203453/article/details/77239551原创 2018-07-31 23:11:01 · 733 阅读 · 0 评论 -
练习:左移字符串
练习:左移字符串1、题目要求:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!1、我的代码class Solution {public: ...原创 2018-07-22 22:52:02 · 340 阅读 · 0 评论 -
练习:把数组排成最小的数
把数组拍成最小的数1、题目要求输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。2、我的代码class Solution {public: string PrintMinNumber(vector&lt;int&gt; numbers) { ...原创 2018-07-22 22:26:47 · 157 阅读 · 0 评论 -
练习:链表中环的入口节点
练习:链表中环的入口节点1、题目要求给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。2、我的代码/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*/cla...原创 2018-07-22 21:57:24 · 119 阅读 · 0 评论 -
练习:旋转数组的最小元素
练习:旋转数组的最小元素1、题目要求:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。2、我的代码:class Solution {public: ...原创 2018-07-22 21:35:25 · 138 阅读 · 0 评论 -
练习:重建二叉树
重建二叉树1、题目要求输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。2、我的代码/** * Definition for binary tree * struct TreeNode ...原创 2018-07-22 21:25:19 · 151 阅读 · 0 评论 -
练习:栈的压入、弹出序列
栈的压入、弹出序列1、题目要求输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)2、我的代码class Solution {...原创 2018-07-22 20:54:49 · 83 阅读 · 0 评论 -
练习:之字形打印二叉树
1、我的代码1:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {publ...原创 2018-07-21 00:37:27 · 141 阅读 · 0 评论 -
练习: 疯狂队列
[编程题] 疯狂队列小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列。有一次,n个学生在列队的时候,小易老师正好去卫生间了。学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相邻排列学生身高差的绝对值总和。由于按照身高顺序排列的队列的疯狂值是最小的,他们当然决定按照疯狂值最大的顺序来进行列队。现在给出n个学...原创 2018-08-09 23:40:38 · 172 阅读 · 0 评论 -
练习:操作序列
[编程题] 操作序列时间限制:2秒空间限制:32768K小易有一个长度为n的整数序列,a_1,…,a_n。然后考虑在一个空序列b上进行n次以下操作: 1、将a_i放入b序列的末尾 2、逆置b序列 小易需要你计算输出操作n次之后的b序列。 输入描述:输入包括两行,第一行包括一个整数n(2 ≤ n ≤ 2*10^5),即序列的长度。 第二行包括n个整数a_i(1 ≤ a...原创 2018-08-10 00:09:59 · 319 阅读 · 0 评论 -
练习: Count Primes(计算n以内素数个数:高效算法)
【编程题】 Count Primes(计算n以内素数个数:高效算法)代码:class Solution {public: int countPrimes(int n) { if(!n||n==1) return 0; vector<bool> isPrime(n,true); // Loop's ending co...原创 2018-09-12 19:45:01 · 1904 阅读 · 0 评论 -
练习:前缀表达式、后缀表达式
求解:前缀表达式、后缀表达式这里我给出一个中缀表达式:a+b*c-(d+e) 第一步:按照运算符的优先级对所有的运算单位加括号:式子变成了:((a+(b*c))-(d+e)) 第二步:转换前缀与后缀表达式 前缀:把运算符号移动到对应的括号前面 则变成了:-( +(a *(bc)) +(de)) 把括号去掉:-+a*bc+de 前缀式子出现 后缀:把运算符号移动到对应的括号后面 则...原创 2018-09-11 17:49:32 · 1344 阅读 · 0 评论 -
练习:寻找重复次数最多的数
【编程题】Find the maximum repeating number in O(n) time and O(1) extra space我的代码:// C++ program to find the maximum repeating number#include&lt;iostream&gt;using namespace std;// Returns maximu...原创 2018-08-21 12:35:57 · 909 阅读 · 0 评论 -
练习:动态规划:最长公共子串
【编程题】动态规划:最长公共子串题目描述对于两个字符串,请设计一个时间复杂度为O(m*n)的算法(这里的m和n为两串的长度),求出两串的最长公共子串的长度。这里的最长公共子串的定义为两个序列U1,U2,..Un和V1,V2,…Vn,其中Ui + 1 == Ui+1,Vi + 1 == Vi+1,同时Ui == Vi。给定两个字符串A和B,同时给定两串的长度n和m。测试样例:...原创 2018-08-20 19:33:02 · 351 阅读 · 0 评论 -
练习:动态规划:最长公共子序列
【编程题】动态规划:最长公共子串题目要求:对于两个字符串,请设计一个高效算法,求他们的最长公共子序列的长度,这里的最长公共子序列定义为有两个序列U1,U2,U3…Un和V1,V2,V3…Vn,其中Ui&amp;amp;amp;amp;ltUi+1,Vi&amp;amp;amp;amp;ltVi+1。且A[Ui] == B[Vi]。给定两个字符串A和B,同时给定两个串的长度n和m,请返回最长公共子序列的长度。保证两串长度均小于等于...原创 2018-08-20 18:26:30 · 479 阅读 · 0 评论 -
练习:约瑟夫环问题
【编程题】约瑟夫环问题代码1,非递归class Solution {public: int LastRemaining_Solution(int n, int m) { if(n==0) return -1; int s=0; for(int i=2;i&amp;lt;=n;i++){ s=(s+m)...原创 2018-08-27 16:56:09 · 1126 阅读 · 0 评论 -
练习:字符流中第一个不重复的字符
字符流中第一个不重复的字符题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符”go”时,第一个只出现一次的字符是”g”。当从该字符流中读出前六个字符“google”时,第一个只出现一次的字符是”l”。输出描述:如果当前字符流没有存在出现一次的字符,返回#字符。我的代码class Solution{private: ...原创 2018-08-10 18:54:09 · 138 阅读 · 0 评论 -
练习:删除链表中的重复节点
【编程题】删除链表中的重复节点题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1-&gt;2-&gt;3-&gt;3-&gt;4-&gt;4-&gt;5 处理后为 1-&gt;2-&gt;5我的代码/*struct ListNode { int val; struct List原创 2018-08-10 17:25:18 · 204 阅读 · 0 评论 -
练习:数据流中的中位数
[编程题] 数据流中的中位数题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。我的代码class Solution {private: ...原创 2018-08-10 11:09:23 · 439 阅读 · 0 评论 -
练习:最小的k个数
最小的k个数1、题目要求:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。2、我的代码:class Solution {public: vector&amp;amp;amp;amp;lt;int&amp;amp;amp;amp;gt; GetLeastNumbers_Solution(vector&amp;amp;amp;amp;lt;int&a原创 2018-07-20 23:42:21 · 168 阅读 · 0 评论 -
练习:树的子结构
树的子结构1、题目要求:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)2、我的代码:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x...原创 2018-07-20 23:23:14 · 88 阅读 · 0 评论 -
练习:对于非负整数0,1,2,....n-1的排序
题目:对于非负整数0,1,2,….n-1,随机放入一个大小为n的一维数组中,调整元素顺序,辅助空间为O(1)代码:#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; void change(int *a,int len); void main() { int a[] = {10,6,9,5,2,8,4,7...原创 2018-04-14 21:17:22 · 377 阅读 · 0 评论 -
练习:跳台阶
跳台阶一、题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。二、我的思路1、如果只有1个台阶,则结果为1; 2、如果只有2个台阶,则结果为2,即分别跳两次1级或跳一次2级; 3、如果有大于或等于3个台阶,则分两种情况讨论:第一次跳1阶和第一次跳两阶,则剩下的台阶又可单独考虑。 4、综上所述,则看作一个递推式,即为斐波那契数列。原创 2018-02-07 17:12:57 · 786 阅读 · 0 评论 -
练习:对称的二叉树
对称的二叉树一、题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。二、我的思路1、将原二叉树想象成为完全相同的两个二叉树; 2、分别比较这两个二叉树对称位置是否相同; 3、思路是先序二叉树递归遍历方法的变形;三、我的代码/*struct TreeNode { int val; st...原创 2018-02-12 10:43:23 · 122 阅读 · 0 评论 -
练习:二叉树的深度
二叉树的深度一、题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。二、我的思路1、先序递归遍历; 2、设置一个全局的变量current,保存当前的深度; 3、遍历到某个节点时候,如果非空,则current增1; 4、遍历完此节点后,current应减1;三、我的代码/*struct T...原创 2018-02-12 10:11:26 · 148 阅读 · 0 评论 -
练习:数字在排序数组中出现的次数
数字在排序数组中出现的次数一、题目描述统计一个数字在排序数组中出现的次数。二、我的思路1、使用二分查找法找出数组中值为k的任意一个数,并记录其位置pos; 2、在pos前后分别扩展,找到pos前后所有值为k的数,记录个数;三、我的代码class Solution {public: int GetNumberOfK(vector&lt;int&gt; data...原创 2018-02-12 09:52:13 · 114 阅读 · 0 评论 -
练习:二叉树中和为某一值的路径
二叉树中和为某一值的路径一、题目描述输入一颗二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。二、我的思路1、采用先序递归遍历; 2、设置一个全局性的向量容器vector,用来保存当前的路径; 3、设置一个全局性容器,保存结果;三、我的代码/*struct TreeNode ...原创 2018-02-12 09:24:23 · 95 阅读 · 0 评论 -
练习:递归求1+2+……+n
递归求1+2+……+n一、题目要求求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。二、我的思路1、使用递归; 2、使用断路特性,如果ans为0,则(ans += sum_Solution(n - 1))不执行。三、我的代码class Solution {public:原创 2018-01-16 20:33:01 · 3926 阅读 · 0 评论 -
练习:替换空格
替换空格一、题目描述请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。二、我的思路统计原来字符串的长度和空格数量,将原来字符串依次从后面复制到新的字符串中,遇到空格则替换成对应字符。注意新字符串最后不能忘记添加结束符‘\0’。三、我的代码class Solution原创 2018-01-16 19:47:03 · 110 阅读 · 0 评论 -
练习:两个链表的第一个公共节点
两个链表的第一个公共节点一、题目要求输入两个链表,找出它们的第一个公共结点。二、我的思路定义两个指针分别指向两个链表的头结点,分别让这两个指针以相同的速度遍历链表。如果指针遍历到链表结尾,则将其指向对方链表的头结点来缓冲两个链表的头指针到第一个公共节点的长度之差。注意,如果两个链表有第一个公共节点,则剩余的节点均为公共节点。三、我的代码/*struct ListNod原创 2018-01-16 18:58:53 · 191 阅读 · 0 评论 -
练习:从尾到头打印链表
从尾到头打印链表一、题目描述输入一个链表,从尾到头打印链表每个节点的值。二、我的思路如果题目要求不改变链表结构,可以使用栈。三、我的代码/*** struct ListNode {* int val;* struct ListNode *next;* ListNode(int x) :*原创 2018-01-16 18:41:35 · 85 阅读 · 0 评论 -
练习:二叉树的递归与非递归遍历(前序、中序、后序)
二叉树的递归与非递归遍历(前序、中序、后序)二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就 是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历 中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现...原创 2018-04-12 16:11:40 · 270 阅读 · 0 评论 -
练习:全排列
全排列非去重递归版本void permutation1(char* str,int sbegin,int send) //全排列的非去重递归算法 { if( sbegin == send) //当 sbegin = send时输出 { for(int i = 0;i &amp;amp;amp;amp;lt;= send; i++) ...原创 2018-05-12 20:21:14 · 161 阅读 · 0 评论 -
练习:丑数
练习:丑数1、题目要求把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。2、我的代码:class Solution {public: int GetUglyNumber_Solution(int index) { if(i...原创 2018-07-20 22:33:03 · 154 阅读 · 0 评论 -
练习:连续子数组的最大和
练习:连续子数组的最大和1、题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。...原创 2018-07-20 21:38:02 · 98 阅读 · 0 评论 -
练习:包含min函数的栈
练习:包含min函数的栈1、题目要求:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。2、我的代码:class Solution {public: void push(int value) { datavec.emplace_back(value); if(minvec.empty(...原创 2018-07-20 21:22:46 · 74 阅读 · 0 评论