刷题
文章平均质量分 58
csdn_dzh
一些点滴的记录
展开
-
刷题笔记57——LeetCode课程表I、II(拓扑排序)
拓扑序:如果图中从 v 到 w 有一条有向路径,则 v 一定排在 w 之前。满足此条件的顶点序列称为一个拓扑序,这个过程就叫拓扑排序。AOV如果有合理的拓扑序,必定是有向无环图。...原创 2019-06-05 22:20:13 · 774 阅读 · 0 评论 -
刷题笔记45——最小的K个数(TopK问题最全的5种解法)
文章目录题目描述解法1:直接排序,然后返回解法2:原地构造大根堆解法3:STL实现解法4:基于时间复杂度为O(N)的partition方法解法5:不修改数组且适合海量数据的红黑树方法O(nlogk)总结题目描述牛客网输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解法1:直接排序,然后返回最暴力,排序后前k个数...原创 2019-03-15 00:36:26 · 1524 阅读 · 1 评论 -
刷题笔记41——二叉树中和为某一值的路径
文章目录题目描述递归法递归法题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。递归法先序遍历的思想,深度优先一直遍历到叶子结点,如果期望数减路径上的数减到0而且当前结点是叶子结点了,就是所求的路径。否则,回退递归法...原创 2019-03-05 18:37:19 · 192 阅读 · 0 评论 -
刷题笔记37——矩阵中的路径、机器人的移动范围
题目描述链接:https://www.nowcoder.com/questionTerminal/c61c6999eecb4b8f88a98f66b273a3cc?pos=2&orderByHotValue=0来源:牛客网请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子...原创 2019-02-25 22:43:02 · 553 阅读 · 0 评论 -
刷题笔记40——判断数组是否二叉搜索树的后序遍历
文章目录题目描述递归法非递归法题目描述牛客网输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。递归法BST的后序序列的合法序列是,对于一个序列S,最后一个元素是x (也就是根),如果去掉最后一个元素的序列为T,那么T满足:T可以分成两段,前一段(左子树)小于x,后一段(右子树)大于x,且这两段(子...原创 2019-03-04 23:49:38 · 226 阅读 · 1 评论 -
刷题笔记39——栈的压入、弹出序列
文章目录题目描述思路题目描述链接:https://www.nowcoder.com/questionTerminal/d77d11405cc7470d82554cb392585106来源:牛客网输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序...原创 2019-03-04 22:04:48 · 207 阅读 · 0 评论 -
刷题笔记38——调整数组顺序使奇数在前偶数在后,相对位置不变
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。牛客网解析使用冒泡法的思想,奇数后偶数前就交换...原创 2019-02-28 22:07:40 · 995 阅读 · 0 评论 -
刷题笔记36——数组中重复的数字
文章目录题目描述方法1:排序后扫描方法2:使用哈希表题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2方法1:排序后扫描最暴力的方法就是把输入的数组先排序,因为从排...原创 2019-02-18 20:07:49 · 300 阅读 · 0 评论 -
刷题笔记30——判断是否平衡二叉树(AVL)、二叉搜索树(BST)、完全二叉树及结点个数(CBT)
文章目录一、判断一棵树是否平衡二叉树(AVL)二、判断一棵树是否二叉搜索树(BST)三、判断一棵树是否满二叉树(CBT)一、判断一棵树是否平衡二叉树(AVL)条件:对当前结点左子树是否平衡?不平衡就return false,无需后续判断右子树是否平衡?不平衡就return false,无需后续判断左子树右子树均平衡时,左子树的高度是多少?左子树右子树均平衡时,右子树的高度是多少?...原创 2019-01-30 01:27:28 · 524 阅读 · 0 评论 -
刷题笔记29——(先序、层序方式)实现二叉树的序列化和反序列化
文章目录题目描述一、先序方式1. 序列化2. 反序列化二、层序方式1. 序列化2. 反序列化题目描述序列化是将数据结构或对象转换为一系列位的过程,以便它可以存储在文件或内存缓冲区中,或通过网络连接链路传输,以便稍后在同一个或另一个计算机环境中重建。一个结构,用何种文件的形式能记录下来,记录的过程就叫序列化把一个文件中的内容还原出内存中的树结构,就叫反序列化设计一个算法来序列化和反序...原创 2019-01-30 01:12:10 · 444 阅读 · 0 评论 -
刷题笔记35——求解汉诺塔、字符串子序列问题
文章目录题目描述思路测试代码及结果题目描述相传在古印度圣庙中,有一种被称为汉诺塔(Hanoi)的游戏。该游戏是在一块铜板装置上,有三根杆(编号A、B、C),在A杆自下而上、由大到小按顺序放置64个金盘(如下图)。游戏的目标:把A杆上的金盘全部移到C杆上,并仍保持原有顺序叠好。操作规则:每次只能移动一个盘子,并且在移动过程中三根杆上都始终保持大盘在下,小盘在上,操作过程中盘子可以置于A、B、...原创 2019-02-06 11:00:10 · 230 阅读 · 0 评论 -
刷题笔记34——IPO做项目,求获得的最大收益(贪心)
文章目录题目描述思路测试结果及代码题目描述你的本金是W,每次只能做一个项目,不能一次做多个,输入每个项目需要的本金以及做完后获得的利润,每做完一个项目可以获得的收益,支持你去做下一个项目,求做k个项目后,获得的最大收益。思路将项目作为一个结构,包括其花费和利润利用一个小根堆(按代价从低到高),一个大根堆(按利润高到低)。这样就形成一个思想,花最少的钱得到最多的利润。做完k个...原创 2019-02-04 14:47:33 · 582 阅读 · 0 评论 -
刷题笔记33——切金条(贪心策略:堆)
文章目录题目描述思路测试结果及代码题目描述一块金条切成两半,是需要花费和长度数值一样的铜板的。比如长度为20的 金条,不管切成长度多大的两半,都要花费20个铜板。一群人想整分整块金条,怎么分最省铜板?例如,给定数组{10,20,30},代表一共三个人,整块金条长度为10+20+30=60. 金条要分成10,20,30三个部分。 如果, 先把长度60的金条分成10和50,花费60 再把长度...原创 2019-02-04 12:45:58 · 1063 阅读 · 0 评论 -
刷题笔记47——把数组排成最小的数(全排列、顺带复习sort和lambda表达式)
文章目录题目描述解法1:全排列解法2:定义比较规则题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。牛客网解法1:全排列求出这个数组中所有数字的全排列,然后拼起来放到一个数组中,最后求拼起来的数字的最小的数即可。原理同字符串全排列解法2:定义比较规...原创 2019-03-19 15:52:02 · 368 阅读 · 0 评论 -
刷题笔记48——丑数
文章目录题目描述解析题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。丑数p = 2 ^ x * 3 ^ y * 5 ^ z如果最后得到的结果是1,那么就是丑数解析丑数的定义是1或者因子只有2 3 5,可推出丑数=丑数 * 丑数,假定丑数有序...原创 2019-03-19 16:57:43 · 219 阅读 · 0 评论 -
刷题笔记49——两个链表的第一个公共结点
文章目录题目描述解法1:哈希表解法2:求长度差题目描述输入两个链表,找出它们的第一个公共结点。解法1:哈希表解法2:求长度差原创 2019-03-19 20:40:03 · 159 阅读 · 0 评论 -
刷题笔记56—最短路径(Dijkstra)、最小生成树(Prim、Kruskal)
题目链接题目描述万圣节的早上,小Hi和小Ho在经历了一个小时的争论后,终于决定了如何度过这样有意义的一天——他们决定去闯鬼屋!在鬼屋门口排上了若干小时的队伍之后,刚刚进入鬼屋的小Hi和小Ho都颇饥饿,于是他们决定利用进门前领到的地图,找到一条通往终点的最短路径。鬼屋中一共有N个地点,分别编号为1…N,这N个地点之间互相有一些道路连通,两个地点之间可能有多条道路连通,但是并不存在一条两端都是...原创 2019-06-05 12:22:06 · 972 阅读 · 0 评论 -
刷题笔记55——孩子们的游戏(圆圈中最后剩下的数字)
文章目录题目描述分析题目描述链接:https://www.nowcoder.com/questionTerminal/f78a359491e64a50bce2d89cff857eb6来源:牛客网每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一...原创 2019-04-03 18:28:07 · 353 阅读 · 0 评论 -
刷题笔记54——翻转单词顺序列、左旋转字符串
文章目录题目描述解法1解法2:题目描述链接:https://www.nowcoder.com/questionTerminal/3194a4f4cf814f63919d0790578d51f3来源:牛客网牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“stud...原创 2019-03-28 23:00:47 · 401 阅读 · 0 评论 -
刷题笔记53——滑动窗口从入门到入土
文章目录一、和为S的两个数字分析二、和为S的连续正数序列分析一、和为S的两个数字输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。分析递增序列,两个指针,哪边多了就往左走,哪边少了就往右走二、和为S的连续正数序列链接:https://www.now...原创 2019-03-28 20:33:48 · 531 阅读 · 0 评论 -
刷题笔记52——数组中只出现一次的数字
文章目录题目描述思路题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。思路核心思想:一个数字异或它自己是0那么,由于题目中其他的数字都出现了两次,我们可以对数组中的数字进行从左往右的异或操作这样,相同的数字异或就会抵消,但最终会剩下两个只出现了一次的元素,它们做异或的结果二进制表示肯定至少含有一个1于是我们想到可以将这些数字分组...原创 2019-03-28 20:13:48 · 274 阅读 · 0 评论 -
刷题笔记51——求树的最大高度以及判断平衡二叉树
文章目录题目描述分析题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。分析求树高,判断平衡因子原创 2019-03-28 19:23:56 · 556 阅读 · 0 评论 -
刷题笔记44——数组中出现次数超过一半的数字
文章目录题目描述解法1:使用哈希表,空间换时间解法2:利用数组特性题目描述链接:https://www.nowcoder.com/questionTerminal/e8a1b01a2df14cb2b228b30ee6a92163?source=relative来源:牛客网数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5...原创 2019-03-12 23:55:28 · 218 阅读 · 0 评论 -
刷题笔记46——连续子数组的最大和
文章目录题目描述解法1:利用数组的规律解法2:动态规划题目描述链接:https://www.nowcoder.com/questionTerminal/459bd355da1549fa8a49e350bf3df484来源:牛客网HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候...原创 2019-03-17 22:31:54 · 183 阅读 · 0 评论 -
刷题笔记50——完全平方数(LeetCode279)
文章目录题目描述解析题目描述给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, …)使得它们的和等于 n。你需要让组成和的完全平方数的个数最少。LeetCode279示例 1:输入: n = 12输出: 3解释: 12 = 4 + 4 + 4.示例 2:输入: n = 13输出: 2解释: 13 = 4 + 9.解析Q:会不会没有解?并不会...原创 2019-03-21 13:38:09 · 380 阅读 · 0 评论 -
刷题笔记43——字符串的全排列
文章目录题目描述思路题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。牛客网思路对于字符串的排列问题:如果能生成n-1个元素的全排列,就能生成n个元素的全排列。对于只有一个元素的集合,可以直接生成全排列。所以全排列的递归终止条件很明确,只有一个元素时。...原创 2019-03-12 09:41:49 · 241 阅读 · 0 评论 -
刷题笔记42——二叉搜索树与双向链表(递归与非递归解法)
文章目录题目描述解法1:非递归解法2:递归题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向牛客网解法1:非递归采用中序遍历的思想,修改当前结点与前一遍历结点的指针指向需要一个栈,一个头结点标志位,一个当前结点的前一结点先向左压一溜,到头了,就设那个最左结点为头结点,因为它最小,置标志位为false到其右...原创 2019-03-11 22:25:04 · 403 阅读 · 0 评论 -
刷题笔记32——STL::map实现并查集、岛问题
文章目录一、STL::map实现并查集测试结果代码二、岛问题题目描述思路一、STL::map实现并查集测试结果代码实现思路见 此处——并查集#include <iostream>#include <map>#include <stack&am原创 2019-02-02 12:53:15 · 802 阅读 · 0 评论 -
刷题笔记26——链表是否带环、环入口、链表(有环无环)相交问题分析与总结
文章目录题目描述解法1:哈希表解法2:快慢指针题目描述判断一个链表是否成环解法1:哈希表使用哈希表,在遍历结点的过程中把结点放到哈希表中,每一次都去查结点有没有在哈希表,如果查到某个结点在哈希表中(这里find如果没找到,会返回end,此时继续放结点到哈希表),如果查到了,就返回那个结点。这里可以将flag改成结点的形式,找到了返回那个结点,找不到就返回NULL时间复杂度:O...原创 2019-01-22 20:09:16 · 258 阅读 · 0 评论 -
刷题笔记11——输出链表倒数第k个结点
题目描述输入一个链表,输出该链表中倒数第k个结点。方法1:两次遍历链表首先把头结点赋值给P,如果头结点不为零,则从0开始计算链表的长度,不断让其指向下一个结点。进而得到链表的表长。可能链表长度会小于K,所以要判断一下然后用表长得到倒数第k个数,再遍历一次链表即可/*struct ListNode { int val; struct ListNode *next; L...原创 2018-11-12 19:54:45 · 224 阅读 · 0 评论 -
刷题笔记13——合并两个排序的链表(图文说明)
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。方法1:使用vector保存,再将元素存到新链表中① 首先有几种特殊情况,需要返回对应的值思路:考虑一般的情况这里为了避免去创建结点,想了一个办法:就是让新链表的表头指向pHead1,然后链表1到头后再将pHead2连接上去,这样,在后面赋值的时候就可以一一对应起来。② 取...原创 2018-11-13 19:33:53 · 327 阅读 · 0 评论 -
刷题笔记12——单链表反转(三种方法,图文说明)
题目描述输入一个链表,反转链表后,输出新链表的表头。方法1:就地反转链表思路如下:初始化好的,假如我们要让q指向p,那么q的下一个结点就没办法找到了,就会出现断链的情况,如图所以,在每次循环的时候,都额外需要一个指针r,去指向q的下一个结点此时开始反转,让后一节点链接前一结点开始第二次循环,此时r又可以指向q的下一结点。/*struct ListNode ...原创 2018-11-13 13:06:39 · 300 阅读 · 1 评论 -
刷题笔记10——令整数数组的奇数位于前半部分,偶数置于后半部分
题目描述输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。方法1:队列由于要保证数组的相对位置不变,于是遍历数组元素,如果是奇数的,置于队列q1,偶数置于队列q2用push方法入队用pop方法出队用front方法访问队首元素用back方法访问队尾元素用size方法访...原创 2018-11-08 09:20:21 · 351 阅读 · 0 评论 -
刷题笔记9——求输入整数对应二进制中1的个数
题目描述输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。代码将1每次左移,和输入数字进行&运算,结果不为0,则cnt++class Solution {public: int NumberOf1(int n) { int cnt = 0; int index = 1; while(index != 0...原创 2018-11-07 21:27:12 · 320 阅读 · 0 评论 -
刷题笔记8——青蛙跳台阶问题
题目描述一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)。分析当有0级台阶的时候,有0种跳法当有1级台阶的时候,有1种跳法当有2级台阶的时候,有2种跳法当有3级台阶的时候,有3种跳法当有4级台阶的时候,有5种跳法。。。那么,从1级台阶以后,跳法是不是很像斐波那契数列从第2项开始的数列?于是可以参照斐波那契数列的...原创 2018-11-07 19:19:10 · 362 阅读 · 0 评论 -
刷题笔记7——输出斐波那契数列的第n项
题目描述大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。n<=391、递归class Solution {public: int Fibonacci(int n) { int num[39]; num[0] = 0; num[1] = 1; int cnt...原创 2018-11-07 16:25:13 · 812 阅读 · 0 评论 -
刷题笔记6——输出旋转数组的最小元素
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。 输入一个非减排序的数组的一个旋转,输出旋转数组的最小元素。 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。 NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。1、常规方法遍历数组的每一个元素,如果发现有比最小值小的,就把那个值赋给它即可。时间复杂度显然是O(N)cl...原创 2018-11-07 14:28:54 · 170 阅读 · 0 评论 -
刷题笔记5——用两个栈来实现一个队列
题目描述用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。解析栈是后进先出,队列是先进先出,由于题目给定了两个栈,所以思路大致是这样① 在入队push时,直接将元素放到其中一个栈A中② 在出队pop时,将栈A中的元素逐个弹出并放到栈B中一直到将栈A中的元素全部弹出,即完成了栈A元素向栈B的转移然后,将栈B的栈顶元素给result,然后调用栈的pop...原创 2018-11-07 12:11:08 · 125 阅读 · 0 评论 -
刷题笔记4——根据前序遍历和中序遍历重建二叉树
题目描述输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。分析在前序遍历中,第一个数字总是树的根结点的值。于是可以由根结点在中序遍历中将中序遍历序列分成左子树和右子树。如图代码/** * Defi...原创 2018-11-07 11:10:45 · 226 阅读 · 0 评论 -
刷题笔记3——按输入链表值从尾到头顺序返回一个
题目描述输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。1、方法1使用push_back方法,然后再反转,可以利用reverse(a.begin(),a.end()); //反转该方法就比较麻烦2、方法2使用insert方法,该方法能够指定插入位置,如res.insert(res.begin(), head->val)/*** struct ListNo...原创 2018-11-06 22:37:35 · 167 阅读 · 0 评论