- 博客(36)
- 收藏
- 关注
原创 最长无重复子串
最长无重复子串两种思路:一种是暴力解法一种是动态规划package merchant;public class maxNoRepeat { //设置record记录重复字符的位置,然后比较当前字符和重复字符之间的字符串有无重复,有重复就进行记录当前最大 //的子串,然后将重复字符的位置更新,继续向下进行比较 //比如字符串abcdaef,初始record=0,i=1,当当前字符i=...
2020-03-13 21:43:50
112
原创 丑数C++实现
题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。思路1:先求的这个数的质因子,若质因子里面有大于5的数,则这个数不是丑数,就这样循环来做,具体实现见下(但是运行时间过长)class Solution {public: //判断一个数是不是质数...
2019-08-06 15:58:37
1835
原创 顺时针打印矩阵C++实现
题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.思路:用一个全局的数组来存储顺时针打印矩阵的结果,定义变量的lowrow,highrow来分别表示打印的矩阵最外围的小...
2019-08-06 11:43:56
532
原创 二进制中1的个数C++实现
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。分析:思路就是正负数的补码原码的转换表示。实现:class Solution {public: int NumberOf1(int n) { if(n==0) { return 0; } int n1=n...
2019-08-06 10:47:45
528
原创 剑指offer:滑动窗口的最大值
题目描述给定一个数组和滑动窗口的大小,找出所有滑动窗口里数值的最大值。例如,如果输入数组{2,3,4,2,6,2,5,1}及滑动窗口的大小3,那么一共存在6个滑动窗口,他们的最大值分别为{4,4,6,6,6,5}; 针对数组{2,3,4,2,6,2,5,1}的滑动窗口有以下6个: {[2,3,4],2,6,2,5,1}, {2,[3,4,2],6,2,5,1}, {2,3,[4,2,6],2,5...
2019-07-24 15:48:53
73
原创 剑指offer:数据流中的中位数
题目描述如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。我们使用Insert()方法读取数据流,使用GetMedian()方法获取当前读取数据的中位数。思路:用一个数组来存放从数据流中读出的数组,再对这个数组排序,然后计算中位数。实现:C++class...
2019-07-24 15:22:02
68
原创 剑指offer:表示数值的字符串
题目描述请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100",“5e2”,"-123",“3.1416"和”-1E-16"都表示数值。 但是"12e",“1a3.14”,“1.2.3”,"±5"和"12e+4.3"都不是。思路:大体是分为三部分的整数、小数、带e的数,具体的判断方法在代码中class Solution {public: //字符的第一...
2019-07-24 15:05:18
67
原创 剑指offer:正则表达式匹配
题目描述请实现一个函数用来匹配包括’.‘和’‘的正则表达式。模式中的字符’.‘表示任意一个字符,而’'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"abaca"匹配,但是与"aa.a"和"ab*a"均不匹配。思路:这个题很考验分析能力,确实有很多中情况需要讨论》特殊情况:1、两个字符串都是空,则返回...
2019-07-24 13:11:12
62
原创 剑指offer:不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。思路:1、自增自减加法运算class Solution {public: int Add(int num1, int num2) { if(num2>0){ while(num2>0) { ...
2019-07-23 21:49:36
79
原创 剑指offer:把字符串转化为整数
题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0输入+21474836471a33输出21474836...
2019-07-23 20:50:22
90
原创 剑指offer:数组中重复的数字
题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。思路:创建一个用来表示输入数组这个位置的数组有没有被计算过次数了,然后遍历来计算数组中每个数字的重复次数,然后将重复了的数...
2019-07-23 20:14:32
68
原创 剑指offer:字符流中第一个不重复的字符
题目描述请实现一个函数用来找出字符流中第一个只出现一次的字符。例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g"。当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l"。思路:相当于从字符流中读出字符放入到str中,若str中还没有这个字符,则将它加入,若果str中已经有了这个字符,则将它从str中移除实现:class Solution{...
2019-07-23 18:28:51
82
原创 剑指offer:链表中环的入口结点
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。思路:用到了C++中的STL中的set容器,因为set容器中的值只能是唯一的,因此我们可以不断的将节点插入到set中,当有一个重复的节点插入不成功时,这个节点就是环的入口结点了。这里重要用到了set的insert功能:insert(key_value); 将key_value插入到set中 ,返回pair&l...
2019-07-23 17:15:38
65
原创 剑指offer:删除链表中重复节点
题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。思路:先找到第一个不重复的节点来当作头结点,然后在依次找到后面的不重复的节点来连城一个链表。实现:C++/*struct ListNode { int ...
2019-07-23 15:27:11
76
原创 剑指offer:求1+2+3+...+n
题目描述求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。思路:看到这个题目时,想到的第一方法就是循环遍历之类的,但是不符合要求。接着也可以想到用递归来实现,但是不能用if等条件判断语句,所以我们得想出其他方法来判断递归终止的条件。(参考别人的思路<- <-)在C++中,逻辑运算有:或|,与...
2019-07-23 13:51:04
91
原创 剑指offer:孩子们的游戏
题目描述:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回到圈中,从他的下一个小朋友开始,继续0…m-1报数…这样下去…直到剩下最后...
2019-07-23 11:55:58
168
原创 剑指offer:扑克牌顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张_)…他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子…LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K为13。上面的5张...
2019-07-22 22:21:49
74
原创 剑指offer:数组中的逆序对
题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size...
2019-07-22 11:21:55
66
原创 剑指offer:把数组排成最小的数
题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路:其实这个考的是字符串的比较大小,字符串比较大小从第一个字符开始,若第一个字符不相等,则返回他们的assic码的差值,若第一个字符相等,继续比较下一个。以此类推,直至有一方比较完了。对于这个题目,用C++来...
2019-07-21 15:52:36
84
原创 剑指offer:字符串的排列
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。思路:将所有字符都先放到第一位置上,在让后面的继续排列,用到递归的思想实现:C++class Solution {public: vector<string> slist; vector&l...
2019-07-21 11:11:09
62
原创 剑指offer:连续子数组的最大和
题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列...
2019-07-20 22:20:49
59
原创 剑指offer:重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。思路:根据先序遍历和中序遍历的特点,先序遍历的第一个节点一定是根节点,而在中序遍历中,根节点的左半边一定是左子树的节点,右半边一定是右子树的节点。因此我...
2019-07-20 19:36:12
59
原创 剑指offer:序列化二叉树
题目描述请实现两个函数,分别用来序列化和反序列化二叉树思路: 二叉树被建立成文件的过程叫做序列化,而从文件来重新构造二叉树的过程叫做反序列化。序列化可以这样来做,利用先序遍历二叉树,当遍历的节点不为空时,将节点的值变为字符串并在后面加上!来表示分割,当对应位置的节点为空时,在字符串后面加上#反序列化就是利用先序遍历的序列递归的将所得的字符串构造成二叉树,在递归过程中,函数的参数一定要是cha...
2019-07-20 17:11:04
65
原创 剑指offer:二叉搜索树的第k个节点
题目描述给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。思路:二叉搜索树的中序遍历序列刚好是有序的,因此我们采用中序遍历的方法将...
2019-07-20 14:24:47
111
原创 剑指offer:按之字形打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。思路:用到了两个辅助栈s1和s2,初始时s1加入根节点,当s1和s2任意一个不为空时,就访问s1或s2中的节点,在访问时将他们的子节点加入到另一个栈中。直到两个栈都为空,此时相当于树的之字遍历已经完成了。实现:C++/*struct Tr...
2019-07-20 09:40:52
74
原创 剑指offer:对称的二叉树
题目描述请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。思路:二叉树和它的镜像相同,我们可以想到二叉树关于根节点的垂线是轴对称的。因此我们就需要判断左右子树是否关于根节点那一条垂线是否对称。实现:C++用到了递归/*struct TreeNode { int val; struct TreeNode *lef...
2019-07-19 22:05:08
59
原创 剑指offer:二叉树的下一个结点
题目描述给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。思路:如果这个节点为空,返回NULL若果这个节点刚好是一个孤立的根节点,返回NULL若是左叶节点,返回的是它的父节点若是右叶节点(注意,这里要判断这个右叶节点是否是最右的叶节点,若是,则返回空即证明中序遍历已经完成了,没有下一个要遍历的节点了,若...
2019-07-19 20:44:14
69
原创 剑指offer:二叉树与双向链表
题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路:(1)、非递归我们知道,二叉排序树用中序遍历的方法访问出来的序列刚好就是有序序列。因此可以采用中序遍历的非递归算法来解决这个问题。以上图的二叉排序树为例:先一直让根节点及根节点的左子树进栈,10 5 4,此时可以修改4节点的指针指向。4节点出栈。则访问5节点出...
2019-07-19 15:14:42
90
原创 剑指offer:复杂链表的复制
题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)思路:先是根据next域和val域将单链表复制出来。再根据给定的链表的random域来寻找已经复制的链表的random域。实现:C++/*struct RandomLi...
2019-07-19 10:35:11
56
原创 剑指offer:二叉树中和为某一值的路径
题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)思路:根据题目知,每一条路径都是从根节点一直到叶子节点,我们可以想到深度优先遍历,根节点肯定是在路径最开始的,所以我们可以采用先序的深度优先遍历。最先访问根节点,下来是左子树,接着才是...
2019-07-18 23:54:42
62
原创 剑指offer:二叉搜索树的后序遍历序列
题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。思路:我们知道,二叉搜索树也就是二叉排序树,它或者是一棵空树。或者是具有下列性质的树:若左子树不空,则左子树上的节点的值均小于根节点的值;若右子树不空,右子树上所有的节点的值均大于根节点的值;且左右子树分别为二叉排序树。所以,二叉排序树的后续遍历...
2019-07-18 19:37:05
46
原创 剑指offer:从上往下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。思路:用到一个辅助的队列,在打印根节点完成后,将根节点的左右子树依次入队列,在将根节点弹出,队列不为空,重复上述步骤。直到队列为空。就结束了实现:/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(i...
2019-07-18 15:14:45
62
原创 剑指offer:栈的压入,弹出序列
题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)思路:按照栈的的压入序列逐个将压入序列的元素进栈,若碰到和弹出序列相等的元素,则将栈顶...
2019-07-18 14:31:42
67
原创 剑指offer:包含min函数的栈
题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。思路:因为时间复杂度要在O(1),一般的遍历的方法肯定不可行。于是我们想到可以利用一个辅助的栈min来存放最小值。入栈时:先进入data栈,与辅助栈min栈顶比较大小,若小的话就进入min栈,若不小于min的栈顶,则min的栈顶入min栈.出栈时:data栈和min栈都要出栈实...
2019-07-18 13:58:47
57
原创 判断树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)时间限制:1秒 空间限制:32768K分析:A 和 B两棵树(1)根节点的value是否匹配(2)若匹配,进行A与B根节点的左子树与右子树的匹配(3)不匹配,判断A的左子树和右子树的根结点是否和B的根节点匹配重复进行上述(2)(3)部分假设这是A与B树基本思路就是第一步先找到在A中...
2019-07-17 19:19:30
313
原创 prim 算法
这里写自定义目录标题#include<stdio.h>#include<stdlib.h>#define MAXVERTEX 100#define MAXWEIGHT 32767//不临接时表示无穷typedef struct{char hao;//顶点的类型与顶点的号 }vertex;typedef struct{ //采用邻接矩阵的方式来存储图的信息v...
2019-05-26 09:41:24
84
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人