- 博客(59)
- 收藏
- 关注
原创 leetcode面试题15. 三数之和
给你一个包含 n 个整数的数组nums,判断nums中是否存在三个元素 a,b,c ,使得a + b + c = 0 ?请你找出所有满足条件且不重复的三元组。注意:答案中不可以包含重复的三元组。示例:给定数组 nums = [-1, 0, 1, 2, -1, -4],满足要求的三元组集合为:[ [-1, 0, 1], [-1, -1, 2]]【题解】本题...
2020-03-30 21:04:15
396
原创 leetcode面试题62. 圆圈中最后剩下的数字(约瑟夫环)
0,1,,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例:输入: n = 5, m = 3输出:3【题解】1、本题以递归的形式来解题。假定函数f(n,m)表示...
2020-03-30 10:55:09
242
原创 jupyter中tensorflow的tf.summary.merge_all()的问题
问题:在jupyter下采用tf.summary.merge_all() 会出现以下问题。InvalidArgumentError (see above for traceback): You must feed a value for placeholder tensor 'inputs/x' with dtype float and shape [?,1] [[Node: inpu...
2019-01-31 14:28:27
2321
原创 tensorboard在windows下jupyter的在使用/jupyter中画动图
解决tensorboad 在windows下的Jupyter中 使用的问题。问题一:解决jupyter中无法绘制动态图的问题。%pylab 在Jupyter中输入上述命令,获取jupyter的内置画图工具。我的结果是TkAgg / 也可能为Qt5Agg类似。之后加一句命令:%matplotlib tk就可以在生成额外的画图窗口。类似matlab中画图生成新窗口一样。...
2019-01-31 13:06:37
691
原创 windows-jupyter-下装tensorflow
找了挺多技术帖,照做来试图解决在WINDOWS系统下的jupyter安装tensorflow 的 模块。最终解决了。记录一下,希望以后忘记可以用到,如果能帮助到网友,那也是更好了。时间:2019-1-30旧的技术帖都告知tensorflow 只允许 mac & linux 安装,(tensorflow 中文社区的翻译是这么说)后来又有说法是tensorflow是有windows下的...
2019-01-30 16:39:13
781
原创 51、链表的环的入口结点
题目描述:一个链表中包含环,请找出该链表的环的入口结点。解法: 假如从头结点1出发,2为环的入口,3为相遇的点。 1到2 距离为a ,2到3距离为b ,3到2距离为c有两个跟进节点同时前进,p1一次前进一步,p2一次前进两步。最终相遇在3. 则有 p1前进的距离:a+bp2前进的距离: a+b+(c+b)其中p2比p1多走了一个环的距离,且速度为p1的两倍,即距离刚好还是p1的两倍所以有a+b...
2018-06-28 11:22:42
174
原创 50、表示数值的字符串
题目描述:请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。解法:思想类似题目49:正则表达式匹配问题。利用地柜逐
2018-06-28 11:17:51
172
原创 49.正则表达式匹配问题
问题描述:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配已知:bool match(char* str, char* pattern)解法:利用递归思...
2018-06-28 11:10:17
469
原创 dynamic_cast和static_cast
用于笔记学习。。class B{ public:int m_iNum;virtual void foo();}; class D:publicB{public:char* m_szName[100];}; void func(B* pb){D* pd1=static_cast<D*>(pb);D* pd2=dynamic_cast<D*>(pb);}dynamic_cast...
2018-05-28 20:22:41
253
原创 最长公共子括号序列
题目:输入包括字符串s(4 ≤ |s| ≤ 50,|s|表示字符串长度),保证s是一个合法的括号匹配序列。如样例所示: s = "(())()",跟字符串s长度相同的合法括号匹配序列有: "()(())", "((()))", "()()()", "(()())",其中LCS( "(())()", "()(())" )为4,其他三个都为5,所以输出3. 解法:1、取出原
2018-04-10 20:40:31
302
原创 最长公共子串与最长公共子序列问题
题目:1、最长公共子串问题(子串:连续的字符串)str ="abcde",“ab”"cd"都为子串2、最长公共子序列问题(子序列:保证相对顺序即可)str="abcde","ac" ,"ae"都为子序列。在概念上可以说,子串是特殊的子序列。假定有字符串str A , lenA = n, str B , lenB =m;解法:两个题目都是动态规划问题。最长子串的问题,因为是子串是连续的。dp[i][...
2018-04-10 16:26:19
213
原创 48、构建乘积数组
题目:给定数组A[n],构建一个数组B[n],B[i] = A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1],要求不用除法实现。解法:把数组A[n]以A[i]为界限分成左半段和右半段。每一侧都用一个循环求相应的值即可例如。有两个辅助数组help1和help2.在求B[5]时候。help1=A0*A1*A2*A3*A4 ,help2=A6*A7*...*A[n-1]每一个...
2018-04-03 10:26:01
247
原创 47、数组中重复的数字
题目:一个长度为n的整数数组,里面的元素 大小范围在0~n-1之间,请判断是否有重复数字,若有请返回任意一个重复元素。解法:1、利用哈希表2、不用哈希表,利用题目中数组的特性:大小范围在0~n-1之间代码如下:(动态数组的哈希表) bool duplicate(int numbers[], int length, int* duplication) { duplication...
2018-04-03 09:46:33
213
原创 46、将字符串转换成整数
题目:将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数,数值为0或者字符串不是一个合法的数值返回0.解法:1、充分考虑不同的输入情况和异常输入的情形。2、首字符可以为0~9、‘+’、‘-’字符。3、后面的字符必须为0~9之间的字符。4、""、空字符串、和非法输入的 输出为0代码如下: int StrToInt(string str) { if(str.size(...
2018-04-03 09:01:01
223
原创 45、不用加减乘除做加法
题目:求两个整数的和,要求函数中不能使用+、-、*、/ 四则运算符号。解法:1、考虑到整数的运算不能使用加减乘除,那么只有位运算可以使用。2、将a+b转换成add(c,d)的模式。其中c为a+b在二进制表达的过程中未进位的结果。d为a+b在二进制表达中进位的结果。举例:例如a = 10101 ,b=10001; 首先利用a^b得到未进位的结果。即在二进制表达中0+1=1+0=1,0+0=1+1=0...
2018-04-02 16:05:43
204
原创 44、求1+2+3+...+n
题目:求1+2+3+...+n,要求不能使用乘除,for while,if else switch case等关键字和条件判断句(A?B:C)解法:1、提供的是逻辑短路的代码。2、剑指OFFER书提供了多种解法。例如利用构造函数、利用虚函数、函数指针等。 int Sum_Solution(int n) { int ans = n; ans &&am...
2018-04-02 15:45:02
146
原创 43、圆圈中最后剩下的数
题目:输入一个数字n,将0,1,2,3,4..n-1围成一个圆。从数字0开始每次删除第m个数字,求最后剩下的数字。解法:约瑟夫环问题。f(n,m) = [f(n-1,m)+m] % n; f(n,m)实际表示每一轮中,最终存活的数字在每一轮中的编号。代码: int LastRemaining_Solution(int n, int m) { if(n<1||m&...
2018-04-02 11:23:19
173
原创 42、扑克牌顺子
题目:从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。A看做1,J为11,Q为12,K为13.大小王可以看做任何数,但在输入中用0来表示。解法:1、统计5张牌中0的个数count。2、统计5张牌中除0以外最小的数min 到min+4之间中出现0次的数字的个数gap。3、比较0个个数count和 gap 数量。代码如下:下面代码 没有顺子的判断,因为存在顺子,那么count 和g...
2018-04-02 11:00:30
309
原创 41、反转单词顺序
题目:输入一个英文句子。反转句子中单词的顺序。但是单词内字符顺序不变。例如:输入"I am a student.",输入"student. a am I"。解法:字符串逆序即可。类似题目40. 即把题目40中的num的位置替换成 题目41中 空格的位置即可。代码如下: string ReverseSentence(string str) { string res; ...
2018-04-02 10:15:39
318
原创 40、左旋转字符串
题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部,请定义一个函数实现字符串左旋转的功能。比如输入:"abcdefg"和数字2. 输出“cdefgab”。解法:标准解法:1、旋转字符串str[0]~str[num-1],再旋转str[num]~str[n-1],最后旋转整个str即可。代码如下: string LeftRotateString(string str, int...
2018-04-02 09:40:53
132
原创 39、和为S的连续正数序列
题目:输入一个正数s,找出所有和为S的连续整数序列。(至少包含两个数)例如输入15,找到的序列有{1,2,3,4,5}、{4,5,6}、{7,8}共3个序列。解法:1、题目的思想类似文章<38、和为S的两个整数>2、也是设置两个指针left,right。根据当前和的判断来更新left和right代码如下: vector<vector<int> > Find...
2018-04-02 09:15:52
98
原创 38、和为S的两个数字
题目:输入一个递增排序的数组 和 一个数字S,在数组中查找两个数,使得它们的和正好为S,如果有多对数字的和等于S,输入两个数的乘积最小的。解法:1、证明:第一次找到的两个数为两个数的成绩最小。因为是排序好的数字。假设a<b<c<d;有a+d =b+c =10;即有第一个数为x,第二个数为(sum-x),且x<sum-x;乘积y=x(sum-x),sum为一个已知数。要已知y...
2018-04-02 09:07:56
148
原创 37、数组中只出现一次的数字
题目:一个整型数组中除了两个数字以外,其他数字都出现了两次。请找出这个两个数字解法:1、利用异或原理。异或中又m^m=0,即两个相同的数字异或得0;2、该题目有一个简化版本为:一个整型数组中除了(一)个数字以外,其他数字都出现了两次。请找出这个一个数字!!answer: 对数组遍历异或,最后的结果即为只出现一次的数字。对于本题:以相同思想来处理。A、遍历数组异或,得到最后的结果为res, 假...
2018-03-31 10:14:09
110
原创 36、平衡二叉树
题目:输入一颗二叉树根节点,判断是否为平衡二叉树。平衡二叉树:首先平衡二叉树是一颗二叉排序树。再就是每一个非叶子节点的左右子树的高度差<=1;即左右子树也为平衡二叉树。解法:类似题目35.求左右子树的高度。在返回高度的过程中,利用一个变量记录左右子树的高度差的情况。代码如下: bool IsBalanced_Solution(TreeNode* pRoot) { if(...
2018-03-31 09:41:02
201
原创 35、二叉树的深度
题目:输入一棵二叉树的根节点,从该数的深度。即从根节点到叶节点依次经过的节点形成树的一条路径,最长路径的长度即为树的深度。解法:递归即可。注意:求二叉树的深度 为一个基本内容,在判断平衡二叉树或其他场合中经常用到。代码: int TreeDepth(TreeNode* pRoot) { if(pRoot==NULL) return 0; ...
2018-03-31 09:27:38
193
原创 34、数字在排序数组中出现的次数t
题目:统计一个数字在排序数组中出现的次数。解法:1、先求该数字出现的最左边位置。2、再求该数字出现的最右边位置。3、若该数字未出现,则会出现left在right右边。且相邻的情况。最后结果仍然为right-left+1 =0代码: int GetNumberOfK(vector<int> data ,int k) { if(data.size()==0||data...
2018-03-31 09:23:44
121
原创 33、两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。解法:提供两种解法,都为o(m+n)的时间复杂度。前提:因为为普通链表,若两个链表有交点,从该交点开始,后面的节点都是公共的。即有交点的话,两条链表形成Y形, 而不是X形。(一)假设链表1为a-b-c-d-e-NULL, 链表2为f-g-e-NULL.分别遍历两个新的组合遍历(链表1+链表2 : a-b - c - d - e - NULL- f...
2018-03-30 15:50:14
90
原创 32、数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对,输入一个数组,求出这个数组中的逆序对的总数P。对将P对1000000007取模的结果输出。对于50%的数据,size<=10^4对于75%的数据,size<=10^5对于100%的数据,size<=2*10^5解法:1、实质就是一个归并排序的过程2、在归并排序的过程中的merge部分,假设相邻的...
2018-03-30 11:26:54
100
原创 31、第一次只出现一次的字符
题目:在一个字符串(1<= 字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置。解法:1、利用一个数组实现哈希表的功能。2、在C++中 ASCII码 长度一共有256 ,因此用256大小的数组即可。3、在JAVA中 ASCII 为65536 ,要用对应大小的数组。代码如下: int FirstNotRepeatingChar(string st...
2018-03-30 10:10:48
104
原创 30、丑数
题目:求按从小到大顺序的第N个丑数。丑数:只包含因子2,3,5的整数称作丑数,把1当做第一个丑数。解法:1、假设数组中已有排好序的丑数,把已有的当前最大丑数记作M。2、接下来的一个丑数必然是前面某一个丑数乘以2、3或者5的结果。3、将前面所有丑数全部乘以2,能获得若干个小于或等于M的结果,这些已在排好序的数列中,还会出现若干个大于M的结果,我们把第一个大于M的结果记作M2。后面的结果都会大于M2,...
2018-03-30 09:58:17
153
原创 29、把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数组拼接起来 排成一个数,打印能拼接处的所有数字中最小的一个。例如:数组{3,32,321}最后打印321323解法:这个题实际上和把一个字符串数组,例如['a','ab','cd','bd']排成最小的字典顺序是一样的题目。1、考虑到数字直接拼接到一起可能溢出的问题。将数字转换成字符串。2、利用str1+str2<str2+str1的比较方法,判断st...
2018-03-29 20:56:22
153
原创 28、整数中1出现的次数
题目:求出1~n之间的整数中1出现的次数。其中n为任意非负整数。解法:注意是出现的次数:例如数字11,1出现的次数为2次。1、本题的思想是从最低位开始求1出现的次数。2、然后把所有位1出现的次数相加。eg:n=12345,( n=abcde ) 例如要求百位为1的数字的个数。一共分两步走。先求0~12299 中百位 为1的数字。再求12300~12345中百位为1的数字。(一)0~12299 中...
2018-03-29 16:07:17
135
原创 27、连续子数组的最大和
题目:输入一个整型数组,数组里面有正数和负数,数组中一个或连续的多个整数形成的一个子数组,求所有子数组的和的最大值。要求时间复杂度为o(n)。(子数组的长度至少为1)解法:1、动态规划做法。2、先初始化到a[0]的子数组的最大和,依次求到a[1]的子数组的最大和代码如下: int FindGreatestSumOfSubArray(vector<int> array) { ...
2018-03-29 14:39:21
106
原创 26、最小的k个数
题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8则最小的4个数字为1,2,3,4解法:1、本题思想主要是堆排序。当然如果直接对所有数字使用堆排序或者快排,时间复杂度为o(n*logn)2、本题利用改进的堆排序,时间复杂度为o(n*logk)3、主要思想为:(一)提取数组中的前k个数,构建k个数初始大根堆heap,即heap[0]为前k个数中最大的值(二)利用遍历,从...
2018-03-29 14:13:16
125
原创 25、数组中出现次数超过一半的数字
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。若不存在该数字,则输出0.解法:1、利用阵地法思想。2、以数组第一个数上阵地,阵地上的数字记为res,把阵地上的数字数量记为count,3、从array[2,....n-1]开始逐一上数来PK,若两个数一样,count++,不一样就--,4、出现count==0 的情况,令新来的为阵地上的数字res。5、直到最后,若存在一个数字A...
2018-03-29 13:37:04
134
原创 24、字符串的排列
题目:输入一个字符串,按字典序打印出该字符串中字符的所有排列,例如,输入字符串abc,打印出abc,acb,bac,bca,cab,cba.解法:将字符串看成两部分,首字母和剩下的字符串。即str = str[0]+str[1,2..n-1]然后利用递归,依次把首字母和后面的字母进行交换即可。代码: vector<string> Permutation(string str) {...
2018-03-29 11:27:10
123
原创 23、二叉搜索树与双向链表
题目:输入一颗二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。解法:二叉搜索树的中序遍历(左,根,右)形成的就是一个排序的结构。因此整体利用二叉树的中序遍历。在遍历过程中修改left和right指向即可。代码: TreeNode* Convert(TreeNode* pRootOfTree) { if(pRoo...
2018-03-29 10:00:57
103
原创 22、复杂链表的复制
题目:输入一个复杂链表(每个节点中又节点值,以及两个指针,一个指向下一个节点,一个指向任意节点)返回结果为复制后复杂链表的head。解法:(一)先复制每一个节点以及每一个节点的next指针,再从头遍历每一个节点,记录它们的random节点,再head遍历节点寻找random节点所在的位置。这样会用两个循环进行。时间复杂度o(n^2)(二)1、先复制每一个节点以及每一个节点的next指针。 ...
2018-03-29 09:06:23
116
原创 21、二叉树中和为某一个值的路径
题目:输入一颗二叉树和一个整数,打印出二叉树中节点值的和为输入整数的所有路径。路径:从根节点出发到叶节点形成的一条路径。解法:1、利用栈的原理。将前序遍历将节点压入栈中后,利用递归检查完其左右节点形成的路径是否满足题目要求后返回。2、子节点检查完毕后,弹出对应的根节点。代码如下: vector<vector<int> > FindPath(TreeNode* root...
2018-03-28 10:45:57
121
原创 20、二叉搜索树的后续遍历序列
题目:输入一个整数数组,判断该数组是否为某二叉树的后续遍历结果,如果是输出true,否为false。假设输入中任意两个数字都不相同。例如 5,7,6,9,11,10,8 可以为一个后续遍历结果。其中5,7,6,为左子树,9,11,10为右子树,8为根解法:1、二叉搜索树后续遍历序列:(左)(右)根,且左<根<右。序列中的数字大小关系如左边所示。2、利用循环法。3、利用递归法。(一)循环...
2018-03-28 10:09:28
152
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人