![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
领扣lintcode
乱做的题
this_is_qiqi
这个作者很懒,什么都没留下…
展开
-
主元素 III-LintCode
描述:给定一个整型数组,找到主元素,它在数组中的出现次数严格大于数组元素个数的1/k。 注意事项数组中只有唯一的主元素样例:给出数组 [3,1,2,3,2,3,3,4,4,4] ,和 k = 3,返回 3思路:用哈希的方法建立一一对应,即对于给出的数组中的数m及其个数n,有a[m+500000]=n;(m+500000)是防止原创 2018-02-07 17:04:48 · 226 阅读 · 0 评论 -
链表总结
一开始学习链表的时候比较一头雾水,我觉得主要原因是我指针那一部分的知识都已经忘记了,所以我又看了一遍C++课本里指针那一部分的知识,就能大体搞懂链表了。然后开始做 LintCode 上的链表的一开始的几个简单的题练练手。后来又花了三四个小时看了老师讲的链表的插入排序那个题, 把每一个细节都搞懂,感觉做完这个插入排序做链表这里的题都比较得心应手了。我感觉链表这个线性结构有好的地方也有不好原创 2017-03-31 15:11:42 · 383 阅读 · 1 评论 -
删除排序链表中的重复数字 II -LintCode
描述:给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。样例:给出 1->2->3->3->4->4->5->null,返回 1->2->5->null给出 1->1->1->2->3->null,返回 2->3->null思路:这道题其实是之前的删除链表中重复数字的一个升级版1.我们先创建一个temp,赋一个链表中不会出现的值给它。并且创建一个新的链表原创 2017-03-31 14:56:24 · 628 阅读 · 1 评论 -
回文链表-LintCode
描述:设计一种方式检查一个链表是否为回文链表。样例:1->2->1 就是一个回文链表。思路:因为链表是按顺序访问,对于这道题来说不易操作,所以我转换成了比较好操作的数组。1.先将链表里的数都存入数组,记一下链表的长度length2.另i为第一个元素从前面遍历,j为最后一个元素从后面遍历,逐一判断a[i]是否等于a[j],如果相等就进行下一个判断,如果不相等就结束循环原创 2017-03-31 11:26:08 · 386 阅读 · 0 评论 -
两两交换链表中的节点-LintCode
描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。样例:给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。思路:这个题吐槽下自己,感觉自己蠢到爆哎,思想简直秀逗了,非要交换两个节点,下面ac的代码里被注释掉的代码就是交换节点的代码,我竟然还想了N多条怎样交换节点,比如存到一个数组里交换好了再存回去,再比如我写的这个找个te原创 2017-03-24 17:19:18 · 719 阅读 · 0 评论 -
翻转链表-LintCode
描述:翻转一个链表。样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null思路:新建一个链表,把给出链表的节点利用头插法插入新链表,就得到了翻转的链表。/** * Definition of ListNode * * class ListNode { * public: * int val; * Li原创 2017-03-24 17:07:49 · 184 阅读 · 0 评论 -
删除链表中倒数第n个节点-LintCode
描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。注意事项链表中的节点个数大于等于n样例:给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.思路:跑一下链表求一下链表的长度length,然后循环到length-n个节点,将它的原创 2017-03-24 17:04:39 · 192 阅读 · 0 评论 -
删除排序链表中的重复元素-LintCode
描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例:给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null思路:因为给的链表是已经排好序的,所以我们用循环遍历链表,判断当前指针指向的节点的val值是否与它的next的val值相同,如果相同的话我们就另当原创 2017-03-24 16:52:52 · 212 阅读 · 0 评论 -
链表划分-LintCode
描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例:给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null思路:这个题我们可以建立两个新的链表left和right;遍历给定原创 2017-03-23 23:57:41 · 203 阅读 · 0 评论 -
链表倒数第n个节点-LintCode
描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例:给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1。思路:这道题就是先用循环找出链表的长度length啊,然后再循环一遍,输出链表的第length-n的地址就好了(这里吐槽下自己,一开始没看见给的函数要求返回地址,返回的是val值,怎么检查错误也检查不出来,原创 2017-03-23 22:00:17 · 200 阅读 · 0 评论 -
合并两个排序链表-LintCode
描述:将两个排序链表合并为一个新的排序链表。样例:给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。思路:这道题其实跟上一道链表的插入排序是亲兄弟啊,在链表的插入排序里面我们自己创建了新的链表dummy用来存放我们的排好序的链表,这道题里给出的两条链表都是已经排好序的,所以我们直接原创 2017-03-23 21:44:55 · 336 阅读 · 0 评论 -
链表插入排序-LintCode
描述:用插入排序对链表排序。样例:Given 1->3->2->0->null, return 0->1->2->3->null思路:这是打开我链表新世界大门的一道题,感觉理解了这道题后面的题做起来都炒鸡轻松的~首先我们先创建一个新的链表dummy用于存放排好序的节点,一个中间变量节点temp,一个用于循环查找的指针p令其指向dummy头节点;令head原创 2017-03-23 21:00:19 · 294 阅读 · 0 评论 -
在O(1)时间复杂度删除链表节点-LintCode
描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。样例:给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为 1->2->4。思路:把给定节点的下一个节点整体赋给给定节点就好了,这道题实在太水了,吐槽~/** * Definition of ListNode * class ListNode原创 2017-03-23 20:55:01 · 219 阅读 · 0 评论 -
链表求和-LintCode
描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例:给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null思路:一开始这个题我是想用while和for循环再用/10和%10循环相加两个链表的每个节点再进位原创 2017-03-22 23:36:26 · 484 阅读 · 0 评论 -
删除链表中的元素-LintCode
描述:删除链表中等于给定值val的所有节点。样例:给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。思路:用循环逐个访问链表的节点,如果该节点指向的下一个节点的val值等于给定的值,则令其指向下一个的下一个就好了呀~/** * Definition for singly-linked原创 2017-03-22 23:21:29 · 209 阅读 · 0 评论 -
Convert BST to Greater Tree-LintCode
描述:Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key in BST原创 2017-05-21 21:57:43 · 170 阅读 · 0 评论 -
在二叉查找树中插入节点-LintCode
描述:给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。 注意事项You can assume there is no duplicate values in this tree + node.样例:给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2原创 2017-05-21 21:32:02 · 268 阅读 · 0 评论 -
合并区间-LintCode
描述:给出若干闭合区间,合并所有重叠的部分。样例:给出的区间列表 => 合并后的区间列表:[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18]原创 2017-06-14 23:54:57 · 246 阅读 · 0 评论 -
两数组的交 II -LintCode
描述:计算两个数组的交 注意事项每个元素出现次数得和在数组里一样答案可以以任意顺序给出样例:nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].思路:这道题的思路与两组数的交一样是建立哈希表,区别在于将a[x]的值改为i+1,最后输出a[x]的值个x。class Solution {p原创 2017-06-14 23:49:13 · 173 阅读 · 0 评论 -
两组数的交-LintCode
描述:返回两个数组的交 注意事项Each element in the result must be unique.The result can be in any order.样例:nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].思路:这道题建立了一个哈希函数,建立数组a[ ]=0,令a原创 2017-06-14 23:39:12 · 299 阅读 · 0 评论 -
整数排序-LintCode
描述:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。样例:对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。思路:无论是冒泡排序、选择排序、插入排序都是O(n^2)的算法。AC代码:冒泡排序:class Solution {public: /**原创 2017-06-14 23:35:12 · 250 阅读 · 0 评论 -
验证二叉查找树—LintCode
描述: 给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。 节点的右子树中的值要严格大于该节点的值。 左右子树也必须是二叉查找树。 一个节点的树也是二叉查找树。ac代码:/** * Definition of TreeNode: * class TreeNode { * public: * int val; *原创 2017-10-12 17:22:15 · 203 阅读 · 0 评论 -
快速幂—LintCode
描述: 计算a^n % b,其中a,b和n都是32位的整数。样例: 例如 2^31 % 3 = 2例如 100^1000 % 1000 = 0思路:二分求幂。ac代码:class Solution {public: /* * @param a, b, n: 32bit integers * @return: An integer */ int m原创 2017-10-12 17:21:04 · 181 阅读 · 0 评论 -
排序列表转换为二分查找树-LintCode
描述:给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树样例: 21->2->3 => / \ 1 3思路:折半取链表中的元素作为其根节点,左半部分作为其左子树,右半部份作为其右子树。不断递归。相比于数组转换二叉查找树,多了些链表的遍历而已。AC代码:/** * Defi原创 2017-09-05 23:24:09 · 216 阅读 · 0 评论 -
全排列-LintCode
描述:给定一个数字列表,返回其所有可能的排列。 注意事项你可以假设没有重复数字。样例:给出一个列表[1,2,3],其全排列为:[ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1]]思路:1.当只有一个数时,全排列为其本身。2.当有两个数时,选原创 2017-09-04 22:45:29 · 731 阅读 · 0 评论 -
平面列表-LintCode
描述:给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。 注意事项如果给定的列表中的要素本身也是一个列表,那么它也可以包含列表。样例:给定 [1,2,[1,2]],返回 [1,2,1,2]。给定 [4,[3,[2,[1]]]],返回 [4,3,2,1]。思路:我原创 2017-08-31 22:33:41 · 690 阅读 · 2 评论 -
平衡二叉树-LintCode
描述:给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 样例:给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7}A) 3 B) 3 / \ \ 9 20原创 2017-08-31 22:23:31 · 453 阅读 · 0 评论 -
二叉树中的最大路径和-LintCode
描述:给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和)样例:给出一棵二叉树: 1 / \ 2 3返回 6思路:首先要考虑到二叉树中的节点存在正数也存在负数,且最大路径和所在路径是任意两个节点的通路或者是一个节点自己。所以不能直接使用之前根原创 2017-09-05 23:17:22 · 2625 阅读 · 0 评论 -
子树-LintCode
描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。 注意事项若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。样例:下面的例子中 T原创 2017-04-11 17:46:48 · 255 阅读 · 0 评论 -
二叉树的最小深度-LintCode
描述:给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。样例:给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2思路:一开始想偷懒直接将求二叉树最大深度中的大于号原创 2017-04-11 17:45:33 · 234 阅读 · 0 评论 -
二叉树的最大深度-LintCode
描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例:给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.思路:这个题就是递归,不断返回左右子树中较大的高度。代码:/** * Definition of TreeNode: * c原创 2017-04-11 17:30:01 · 392 阅读 · 0 评论 -
翻转二叉树-LintCode
描述:翻转一棵二叉树样例: 1 1 / \ / \2 3 => 3 2 / \ 4 4思路:这个题就是递归调用 swap( , ) 函数,交换一个根节点的左右子树。代码:/** * Definition of TreeNode:原创 2017-04-11 17:22:02 · 166 阅读 · 0 评论 -
等价二叉树-LintCode
描述:检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。样例: 1 1 / \ / \ 2 2 and 2 2 / /4 4就是两棵等价的二叉树。 1原创 2017-04-11 17:16:07 · 163 阅读 · 0 评论 -
将二叉树拆成链表-LintCode
描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right指针,来表示链表中的 next 指针。 注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。样例: 1 \ 1 2 / \原创 2017-04-11 16:51:31 · 250 阅读 · 0 评论 -
把排序数组转换为高度最小的二叉搜索树-LintCode
描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 注意事项There may exist multiple valid solutions, return any of them.样例:给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \原创 2017-04-11 16:34:25 · 259 阅读 · 0 评论 -
克隆二叉树-LintCode
描述:深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。样例:给定一个二叉树: 1 / \ 2 3 / \4 5返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \4 5思路:这个题还是利用递归思想,对原创 2017-04-11 16:27:45 · 227 阅读 · 0 评论 -
二叉树的所有路径-LintCode
描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。样例:给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]思路:这道题与二叉树的路径和的思想是一样的,只是换了一种存储和输出方式。基本思想还是递归,访问从根节点到叶子节点的路径,原创 2017-04-11 15:35:28 · 235 阅读 · 0 评论 -
二叉树的路径和-LintCode
描述:给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。样例:给定一个二叉树,和 目标值 = 5: 1 / \ 2 4 / \ 2 3返回:[ [1, 2, 2], [1, 4]]思路:我们遍历从原创 2017-04-11 15:19:52 · 2076 阅读 · 0 评论 -
二叉树的层次遍历-LintCode
描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例:给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]思路:1.这个题我们主要采用队列的先进先出的思想。2.首原创 2017-04-11 14:11:13 · 180 阅读 · 0 评论 -
二叉树的后序遍历-LintCode
描述:给出一棵二叉树,返回其节点值的后序遍历。样例:给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [3,2,1]思路:递归函数。代码:/** * Definition of TreeNode: * class TreeNode { * public: * int原创 2017-04-11 12:41:26 · 189 阅读 · 0 评论