![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法
文章平均质量分 54
_忽如远行客
人一能之,已百之;人十能之,己千之.果能此道矣,虽愚必明,虽柔必强。
展开
-
【leetcode】求字符串中括号全部匹配的最长子字符串长度
目录题目描述方法1:暴力求解法方法2:动态规划求解法方法3:栈求解法方法4:字符串双向遍历法题目描述给定一个只由左括号‘(’和右括号')'组成的字符串,求该字符串中括号格式合法的最长子字符串长度。如“(())”,它的括号全部匹配的最长子字符串为“(())”,长度为4.“())()”的括号全部匹配的最长子字符串为“()”,长度为2.方法1:暴力求解法将字符...原创 2019-01-16 20:33:24 · 1270 阅读 · 0 评论 -
【二叉树问题】非递归进行二叉树的前序、中序、后序遍历
目录非递归实现二叉树的前序遍历非递归实现二叉树的中序遍历非递归实现二叉树的后序遍历代码实现用非递归方法进行二叉树的前序、中序、后序遍历,要对从上到下遍历过的节点进行存储,再根据相关条件循环限制输出,因此要用到额外数据结构——栈,栈弹出元素的顺序即为对应的遍历顺序非递归实现二叉树的前序遍历1、将根节点压入栈中2、栈不为空时,弹出栈顶元素temp,如果temp的右子树节...原创 2018-12-31 14:30:38 · 241 阅读 · 0 评论 -
【二叉树问题】递归实现链表的前序、中序、后序遍历
无论是递归方法还是非递归方法,时间复杂度为O(N),N为二叉树节点个数。额外空间复杂度为O(L),L为二叉树的层数。递归方法实现前序、中序、后序遍历注意vector<int>result进行引用传递的做法: 引用传递方法1:void DLR(vector<int> & result2){...//此函数修改result2,主函数中result会...原创 2018-12-31 11:09:35 · 409 阅读 · 0 评论 -
【经典动态规划问题】字符串编辑最小代价问题
目录 题目分析状态边界值讨论一般情况讨论代码实现题目字符串A编辑成字符串B可有三种操作: 插入、删除、修改,对应的代价为c0,c1,c2,给出字符串A和字符串B以及各自长度m、n,返回字符串A编辑成字符串B的最小代价。分析状态dp[i][j]表示A[0,...i-1]编辑为B[0,...j-1]需要的代价,i,j指的是当前A、B中的字符个数边界值...原创 2018-12-25 16:37:14 · 1977 阅读 · 0 评论 -
【链表问题】复杂链表(带random指针)的复制
题目设链表的结构为struct RandomListNode { int label; struct RandomListNode *next, *random; RandomListNode(int x) : label(x), next(NULL), random(NULL) { }};其中random 指针可指向链表中任...原创 2018-12-30 21:24:47 · 293 阅读 · 0 评论 -
【经典动态规划问题】0-1背包问题
0,1背包问题一个背包有一定的承重cap,有N件物品,每件都有自己的价值,记录在数组v中,也都有自己的重量,记录在数组w中,每件物品只能选择要装入背包还是不装入背包,要求在不超过背包承重的前提下,选出物品的总价值最大。每个物品只有1个,给定物品的重量w价值v及物品数n和承重cap。请返回最大总价值。状态:dp[i][j] 存储物品0,...i存储到承重为j的背包中的最大价值边界讨...原创 2018-12-25 15:39:44 · 513 阅读 · 0 评论 -
【链表问题】判断单向链表是否相交
题目给定两个单链表的头节点head1和head2,如何判断两个链表是否相交?相交的话返回true,不想交的话返回false。给定两个链表的头结点head1和head2,请返回一个bool值代表它们是否相交。思路重点是要把有环和无环的情况都想到。参考:【链表问题】判断有环单链表是否相交、【链表问题】判断无环单链表是否相交、【链表问题】单向链表判断是否有环、求入环节点、求环长、...原创 2018-12-30 19:28:08 · 149 阅读 · 0 评论 -
【链表问题】判断有环单链表是否相交
题目给定两个有环单链表,判断两个链表是否相交,如果相交返回true,不相交返回false思路两个有环单链表我们能求出各自的入环节点。(1)入环节点相同,两个链表一定相交(入环节点相同,next指针指向的值一定相同)(2)入环节点不同,判断是下面哪一种情况和求入环节点博客中已经介绍过单向链表求入环节点,将返回值改为指向节点类型的指针即可。代码实现/*struc...原创 2018-12-30 17:07:45 · 264 阅读 · 0 评论 -
【经典动态规划问题】最长公共子序列LCS
目录题目题目分析状态边界值讨论其他情况讨论代码实现从题目出发分析如何用动态规划求解最长公共子序列问题题目给定两个字符串A和B,返回两个字符串的最长公共子序列的长度。例如,A="1A2C3D4B56”,B="B1D23CA45B6A”,”123456"或者"12C4B6"都是最长公共子序列。给定两个字符串A和B,同时给定两个串的长度n和m,请返回最长公共子序列...原创 2018-12-25 13:04:49 · 191 阅读 · 0 评论 -
【链表问题】判断无环单链表是否相交
目录 题目思路哈希表判断两链表是否相交根据链表相交性质判断题目现在有两个无环单链表,若两个链表的长度分别为m和n,判断这两个链表是否相交。给定两个链表的头结点headA和headB,请返回一个bool值,代表这两个链表是否相交。保证两个链表长度小于等于500。思路首先明确,两个链表相交是指从某个节点开始,存储的下一个节点的地址相同。相交的结点即为公共节点,这...原创 2018-12-30 13:45:12 · 292 阅读 · 0 评论 -
【链表问题】单向链表判断是否有环、求入环节点、求环长、求链表长度
目录 题目:思路:代码实现注意点此题的其他变式题目判断一个单项链表是否有环,如果有环,返回入环节点的值,如果无环,返回-1.要求空间复杂度为O(1).思路空间复杂度如果没有要求, 可以用哈希表来判断。在空间复杂度为O(1)的情况下,环状链表相关问题通常用快慢指针来辅助完成。快指针从头节点开始一次走两步,慢指针从头节点开始一次走一步。如果快指针为空或者...原创 2018-12-30 11:21:59 · 500 阅读 · 0 评论 -
【经典动态规划问题】最长上升子序列 LIS
目录 最长上升子序列:O(N^2)动态规划:O(N*logN):贪心+二分最长上升子序列:一个数的序列bi,当b1 < b2 < … < bS的时候,我们称这个序列是上升的。对于给定的一个序列(a1, a2, …, aN),我们可以得到一些上升的子序列(ai1, ai2, …, aiK),这里1 <= i1 < i2 < … < i...原创 2018-12-25 11:24:28 · 320 阅读 · 0 评论 -
【经典动态规划问题】—走楼梯
动态规划的关键点:1、找状态,找出能代表状态的元素作为矩阵下标2、找到状态间的依赖关系,从最简单的情况依次计算3、复杂的问题求dp[i][j]可能要考虑多种情况。动态规划应用中非常经典的走楼梯问题:有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。为了防止溢出,请将结果Mod 1000000007给定一个正整数int n,请返回一个数,代表上楼的方式数。保...原创 2018-12-24 21:50:54 · 590 阅读 · 0 评论 -
一道题看懂如何解决动态规划问题并优化(找零钱问题)
目录找零钱问题:最简单的:暴力搜索针对冗余计算的进一步优化:记忆化搜索进一步优化:动态规划动态规划的简化: 去掉枚举过程,简化动态规划方程总结文章内容来自对牛客网左神课程的整理。很多同学(包括今天之前的我)都认为动态规划很难,其实很大程度上是因为不知道动态规划是怎么从其他算法一步步优化演变来的,上来就介绍动态规划的方法论,难免接受度比较低。“输出是最好的学习方法...原创 2018-12-24 11:22:13 · 634 阅读 · 0 评论 -
【二叉树问题】二叉树层级打印
题目给定二叉树的头结点,按层级打印二叉树节点值。思路从上到下按层遍历,应该是先遍历到的节点先输出。因此用队列作为辅助结构来解此题。层级遍历中关键点要知道什么时候换层。用两个变量last 和nlast,分别指向当前层的最右边和下一层的最右边节点。当当前层的最右边节点从队列中输出时,表示这一层遍历完毕了,此时使last节点直接指向下层的最右端节点,即last = nlast;如何记...原创 2019-01-01 08:21:39 · 798 阅读 · 0 评论 -
【二叉树问题】二叉树的序列化和反序列化
程序中二叉树在内存中,有些时候希望用文件的形式把二叉树记录下来二叉树的序列过程:二叉树->字符串二叉树的反序列过程:字符串-> 二叉树二叉树的序列化二叉树的序列化方式有以下几种:1、根据先序遍历序列化2、根据中序遍历序列化3、根据后序遍历序列化4、按层遍历序列化:队列题目给定一个二叉树的头节点head,已知二叉树的节点值类型为32位整型,请设计一...原创 2019-01-01 09:24:30 · 171 阅读 · 0 评论 -
【二叉树】平衡二叉树的判断
知识点平衡二叉树的性质1、空树是一棵平衡二叉树2、一棵树不为空,并且其中所有的子树都满足各自的左子树与右子树的高度差都不超过1.这棵以节点1为头的整棵树树不是平衡二叉树,因为以2节点为头的左子树的高度为2,右子树高度为0.题目给定一个二叉树的头节点head,判断该二叉树是否是平衡二叉树,如果是,返回平衡二叉树的深度,如果不是,返回false;思路对头节点head...原创 2019-01-01 13:41:43 · 387 阅读 · 0 评论 -
【剑指offer 8-二叉树】有父节点指针的二叉树,求某结点的后继节点(中序遍历的下一个节点)
题目给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针。知识点一个节点的后继节点是指,这个节点在中序遍历序列中的下一个节点。给定一棵二叉树:中序遍历结果为{4,7,2,1,5,3,8,6}再给一个数,求该节点中序遍历中的下一个节点。根据中序遍历的性质,如果给定的节点有右子树,该节点的下一...原创 2019-01-19 20:45:48 · 788 阅读 · 0 评论 -
【leetcode 973】求距离原点最近的k个点·自定义sort的比较函数
973. K Closest Points to Origin题意We have a list of points on the plane. Find the K closest points to the origin (0, 0).(Here, the distance between two points on a plane is the Euclidean distanc...原创 2019-01-13 21:07:02 · 1263 阅读 · 0 评论 -
【leetcode-string】实现string的Atoi算法
目录 题目要求解析最恐怖的实现:bug驱动-哪里有bug改哪里优化代码:一次遍历即可计算题目要求Implement atoi which converts a string to an integer.The function first discards as many whitespace characters as necessary until the fi...原创 2019-01-08 10:21:14 · 464 阅读 · 0 评论 -
【位运算】位运算的基本内容与布隆过滤器
目录 知识点位运算的应用布隆过滤器1、引入布隆过滤器2、布隆过滤器的性质3、布隆过滤器的优势4、布隆过滤器的实现5、失误分析:宁可错杀三千,绝不放过一个6、真实失误率计算7、总结知识点算数运算常用操作符:位运算常用操作符:&(按位与)、 | (按位或)、^(按位异或)、~(取反)、<<(左移,右侧补0)、 >>...原创 2019-01-03 10:52:44 · 368 阅读 · 0 评论 -
【异或运算】寻找数组中出现奇数次的1个或两个值
题目1给定一个整数数组local,已知数组中只有一个数出现了奇数次,其他数都出现了偶数次,找出这个出现奇数次的数。解析此题用到异或的性质:n^n = 0;n^0 = n;并且异或操作满足交换律和结合律。令e = 0,让e逐个对数组中的值做异或,最后结果值即为该出现奇数次的值.如local = {A,B,C,A,B,N,C},令e ^ A^B^C^A^B^N^C = 0^(A^...原创 2019-01-12 15:17:10 · 972 阅读 · 0 评论 -
【位运算】不用额外变量交换A和B的值
给定两个整数a和b,交换a和b的值设a为a0,b为b0常规算法:申请额外变量c,令:c = a0;//c == a0;a == a0;b == b0;a = b;//c == a0;a == b0;b == b0;b= c;//c == a0;a ==b0; b == a0;用位运算交换两个数的值,不使用任何额外空间。首先要明确异或操作符合交换律和结合律,并且有a...原创 2019-01-12 11:20:35 · 619 阅读 · 0 评论 -
【二叉树】搜索二叉树的判断
知识点搜索二叉树又叫二叉查找树,或者二叉排序树。搜索二叉树的性质每棵子树的头节点的值都比各自左子树上的所有节点值要大,同时比各自右子树上的所有节点值要小。中序遍历搜索二叉树得到的序列是升序序列。反过来如果遍历得到序列是升序序列,该二叉树一定是搜索二叉树。红黑树、平衡搜索二叉树都是搜索二叉树的不同实现,但都致力于提高搜索二叉树的搜索效率,同时让搜索二叉树的调整代价尽量小。题目...原创 2019-01-01 21:26:25 · 320 阅读 · 0 评论 -
【二叉树重点】求二叉树的最大搜索子树
题目给定一棵二叉树,其中所有节点的值都不一样,找到含有节点最多的搜索二叉子树,并返回这棵子树的头节点。思路二叉搜索树的性质:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若任意节点的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 任意节点的左、右子树也分别为二叉查找树; 没有键值相等的节点。需要后序递归遍历二叉树,才能从下到上不断更新以当前...原创 2019-01-01 21:25:11 · 550 阅读 · 0 评论 -
【二叉树】求二叉树上节点间的最大距离
题目从二叉树的节点A出发,可以向上或者向下走,但沿途的节点只能经过一次,当到达节点B时,路径上的节点数叫作A到B的距离。对于给定的一棵二叉树,求整棵树上节点间的最大距离。给定一个二叉树的头结点root,请返回最大距离。保证点数大于等于2小于等于500.思路如中节点4和节点2之间的距离为2,节点2和5之间的距离为3.设二叉树的头节点为head,这棵树的节点间最大距离可从以下三种情况中...原创 2019-01-01 19:51:14 · 710 阅读 · 0 评论 -
【二叉树】查找搜索二叉树被调换节点
知识点搜索二叉树的父节点大于左孩子节点的值,小于右孩子节点的值。中序遍历搜索二叉树得到的序列为升序序列。题目一棵二叉树原本是搜索二叉树,但是其中有两个节点调换了位置,使得这棵二叉树不再是搜索二叉树,请找到这两个错误节点并返回他们的值。保证二叉树中结点的值各不相同。给定一棵树的根结点,请返回两个调换了位置的值,其中小的值在前。思路调换位置后,中序遍历得到的序列一定不是升序序列...原创 2019-01-01 16:15:04 · 714 阅读 · 0 评论 -
【二叉树】对折纸,从上往下返回折痕的方向
目录 题目思路代码实现注意点题目给一张纸,从纸的下边向上⽅对折,压出折痕后再展 开。此时有1条折痕,突起的⽅向指向纸条的背⾯,这条折痕叫做“下”折痕 ;突起的⽅向指向纸条正⾯的折痕叫做“上”折痕。如果每次都从下边向上⽅ 对折,对折N次。请从上到下计算出所有折痕的⽅向。给定折的次数n,请返回从上到下的折痕的数组,若为下折痕则对应元素为"down",若为上折痕则为"up...原创 2019-01-01 15:32:14 · 380 阅读 · 0 评论 -
【二叉树】完全二叉树的判断
知识点完全二叉树指的是除了最后一层外,其余层上的节点必须是满的的二叉树。最后一层如果满了,就是一棵满二叉树,如果没满,空缺的节点位置都集中在最后一层的右边。教科书中对完全二叉树的定义为: 对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。题目给定一个二叉树的头节点head,判断一棵树是否为完全二叉树。思...原创 2019-01-01 14:13:10 · 498 阅读 · 0 评论 -
三种方法判断链表是否为回文结构
判断链表是否是回文结构:如1->2->3->2->1则是回文结构目录方法1:时间复杂度O(n),空间复杂度O(N),使用N个额外空间 最简单方法2:时间复杂度O(n),空间复杂度O(N),使用N/2个额外空间方法3:时间复杂度O(n),空间复杂度O(1),最优解方法1:时间复杂度O(n),空间复杂度O(N),使用N个额外空间 最简单将链表元素压入栈,...原创 2018-12-22 21:36:53 · 798 阅读 · 0 评论 -
【牛客算法笔试面试精讲笔记】单链表删除特定元素
题目要求:现在有一个单链表。链表中每个节点保存一个整数,再给定一个值val,把所有等于val的节点删掉。给定一个单链表的头结点head,同时给定一个值val,请返回清除后的链表的头结点,保证链表中有不等于该值的其它值。请保证其他元素的相对顺序。测试样例:{1,2,3,4,3,2,1},2{1,3,4,3,1}注意事项:要注意不同情况的处理:头结点为空,头结点为待删除...原创 2018-12-22 10:18:57 · 359 阅读 · 0 评论 -
Lintcode 42. Maximum Subarray II
42. Maximum Subarray IIGiven an array of integers, find two non-overlapping subarrays which have the largest sum.The number in each subarray should be contiguous.Return the largest sum.ExampleFor give...原创 2018-06-04 20:49:29 · 200 阅读 · 0 评论 -
<LeetCode> 题41:最大子数组
DescriptionGiven an array of integers, find a contiguous subarray which has the largest sum.The subarray should contain at least one number.Have you met this question in a real interview? YesExampleG...原创 2018-06-04 17:36:20 · 165 阅读 · 0 评论 -
贪心算法Lintcode 46. Majority Element
46. Majority ElementGiven an array of integers, the majority number is the number that occurs more than half of the size of the array. Find it.ExampleGiven [1, 1, 1, 1, 2, 2, 2], return 1ChallengeO(n)...原创 2018-06-04 17:29:20 · 492 阅读 · 0 评论 -
[待解决][百炼智能]hihoCoder挑战赛33
时间限制:20000ms单点时限:1000ms内存限制:256MB描述有n个怪物,第i个怪物的血量是ai,设这n个怪物组成的集合为T。现在你有一个技能,发动一次需要花费一个金币,当技能发动后,所有存活的怪物的血量都会-1,当怪物血量降为0后视为被消灭。特别的,如果这次发动的技能后有至少一只怪物死亡,你都将获得一个金币的奖励。令f(S)为消灭集合S中的怪物总共需要付出几个金币,即花费的金币数量减去...原创 2018-06-03 16:20:06 · 857 阅读 · 0 评论 -
[Offer收割]编程练习赛62:方向
时间限制:20000ms单点时限:1000ms内存限制:256MB描述我们可以用 0..359 之间的角度来描述一个方向,现在给出两个方向 a , b,你需要求出,从 a 转到 b 最少需要的角度。例如,从 70° 转到 180°,可以转 110°,也可以转 -250°又比如,从315°转到45°,可以转90°,也可以转 -270°定义一个角度 a 比另一个角度 b 小,当且仅当 a 的绝对值小...原创 2018-06-03 14:18:10 · 452 阅读 · 0 评论 -
hihoCoder[Offer收割]编程练习赛62-被遗忘的整数
时间限制:20000ms单点时限:1000ms内存限制:256MB描述小 Hi 有一个正整数 n,但他忘了这个数是啥了。他只记得 n 的所有约数的平均数是 a,n 的所有约数的调和平均数是 h ,且 a 和 h 都是正整数,现在小 Hi 想要你找出 n 的值。保证 n 存在,且小于等于 108注:n个数a1,a2..an的算术平均数为∑ai / nn个数a1,a2..an的调和平均数为n / ∑(...原创 2018-06-03 14:15:06 · 229 阅读 · 0 评论 -
c++:计算中位数
输入数据 第一行为一个整数 t (1≤t≤100)t (1≤t≤100),表示数据的组数。接下来对于每组数据: 第一行为一个整数 n (1≤n≤500)n (1≤n≤500),表示参加考试的人数。 第二行有 nn 个整数 a1,a2,…an (0≤ai≤100)a1,a2,…an (0≤ai≤100),表示每个人的成绩。输出数据 对于每组数据,输出一行: 第一行为一个实数,表示这门科目的...原创 2018-04-27 08:50:17 · 11856 阅读 · 2 评论 -
c++上三角矩阵求和
上三角矩阵求和:求出其中所有元素的和。输入数据输出数据对于每组数据,输出一行: 第一行为一个整数,表示上三角矩阵所有元素的和。上三角矩阵中将0元素按照对称阵方式填满后,矩阵元素和为Sum^2,Sum= a1+…+an; squareSum = a1^2+…+an^2;因此注意数据值较大,因此用long long存储计算结果。 #include<iostream>using name...原创 2018-05-03 09:52:36 · 3912 阅读 · 0 评论 -
C++:判断某数字序列之前是否出现
判断之前是否见过某个输入:记录之前输入,并进行比较输入数据输入数据第一行为一个整数 t (1≤t≤250)t (1≤t≤250),表示 做过的题目数,接下来有 2t2t 行,其中:第 2i−12i−1 行为一个整数 ni (1≤ni≤1000)ni (1≤ni≤1000),表示第 ii 道题样例输入的 nn;第 2i2i 行为 nini 个整数 ai,1,ai,2,…,ai,ni (|ai,j|≤...原创 2018-04-24 16:46:42 · 551 阅读 · 0 评论