- 博客(44)
- 收藏
- 关注
原创 恢复旋转排序数组
恢复旋转排序数组题目描述:给定一个旋转排序数组,在原地恢复其排序。样例[4, 5, 1, 2, 3] -> [1, 2, 3, 4, 5]解题思路:用sort函数即可。代码实现:class Solution {public: void recoverRotatedSortedArray(vector &nums) {
2017-06-08 17:28:50
278
1
原创 合并排序数组
合并排序数组题目描述:合并两个排序的整数数组A和B变成一个新的数组。样例给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6]解题思路:把两个数组合并为一个,再用sort()重新排序即可。代码实现:class Solution {public: /** * @param A
2017-06-08 17:22:24
421
原创 20153724--3
排序模块总结提交作业如图:总结:我觉得排序这一模块吧,主要看算法技巧。一行好的代码起到的作用相当于好几行普通代码。有时候自己绞尽脑汁也达不到数据百分百通过时,参考下别人的代码会发现,原来可以那么简洁的表达出来。我觉得我这块学的不太好,各种排序方法有点混,编程序的时候已经达不到题目要求的时间复杂度。
2017-06-04 17:58:39
218
原创 合并区间
合并区间问题描述:给出若干闭合区间,合并所有重叠的部分。样例给出的区间列表 => 合并后的区间列表:[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18]
2017-06-03 20:10:35
372
原创 整数排序
整数排序题目描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。样例给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。解题思路:sort()函数就是O(n log n) 的算法。代码实现:class Solution {public:
2017-05-28 12:22:46
418
原创 最长回文串
最长回文串问题描述:给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。数据是大小写敏感的,也就是说,"Aa" 并不会被认为是一个回文串。样例给出 s = "abccccdd" 返回 7一种可以构建出来的最长回文串方案是 "dccaccd"。解题思路:先对给定的字符串排序,然后比较相邻元素是否相同,计算其相同个数,然后整除2
2017-05-21 18:27:14
876
原创 哈希函数
哈希函数问题描述:在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如:hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 +
2017-05-21 16:51:44
291
原创 子数组之和
子数组之和问题描述:给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置。样例给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].解题思路:我的想法是数组的第一个值开始往后加,,每加一个值,把sum存一下,若能得到两个值相同的sum,则找到了一个和为0的子数组,子数组的范围就是第一个s
2017-05-21 15:55:00
1218
原创 快乐树
快乐树问题描述:写一个算法来判断一个数是不是"快乐数"。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。样例19 就是一个快乐数。1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1001
2017-05-21 10:30:44
269
原创 两数组的交2
两数组的交2问题描述:计算两个数组的交。样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].解题思路:此题与两数组的交解题思路相同,只需要把去重操作去掉即可。代码实现:class Solution {public: /** * @param nums1 an integer a
2017-05-21 10:12:28
248
原创 两数组的交
两数组的交问题描述:返回两个数组的交。样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].解题思路:先对给定的两个数组排序,在利用unique()函数去重,最后遍历两数组比较值。代码实现:class Solution {public: /** * @param nums1 an inte
2017-05-21 10:02:52
685
原创 两数之和
两数之和问题描述:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].解题思路:先定义两个数
2017-05-19 16:41:52
182
原创 Convert BST to Greater Tree
Convert BST to Greater Tree问题描述: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 t
2017-05-11 22:18:08
246
原创 在二叉查找树中插入节点
在二叉查找树中插入节点问题描述:给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。样例给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / \1 4 --> 1 4 / / \ 3
2017-05-11 22:02:41
580
原创 将二叉树拆成链表
将二叉树拆成链表问题描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的right 指针,来表示链表中的 next 指针。样例 1 \ 1 2 / \ \ 2 5 => 3 / \ \ \
2017-04-21 19:39:45
213
原创 克隆二叉树
克隆二叉树问题描述:深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。样例给定一个二叉树: 1 / \ 2 3 / \4 5返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \4 5解题思路:利用前序遍历,将给定的树复制一遍即可。代码实现:cl
2017-04-21 19:16:55
220
原创 子树
子树问题描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。样例下面的例子中 T2 是 T1 的子树: 1 3 / \ / T1 = 2 3 T2 = 4 / 4
2017-04-18 21:39:02
246
原创 把排序数组转化为高度最小的搜索二叉树
把排序数组转化为高度最小的搜索二叉树题目描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。样例给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 7解题思路:二叉搜索树是左子树的值比根结点小,根结点的值比右子树小的树(假设左右子树都存在的
2017-04-18 17:24:03
389
原创 二叉树的路径和
二叉树的路径和问题描述:给定一个二叉树,找出所有路径中各节点相加总和等于给定目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。样例给定一个二叉树,和 目标值 = 5: 1 / \ 2 4 / \ 2 3返回:[ [1, 2, 2], [1, 4]]解题思路:根据前序遍历的思路,利
2017-04-18 12:33:51
428
原创 二叉树的所有路径
二叉树的所有路径题目描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。样例给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]解题思路:根据前序遍历的思路,利用局部变量的优点,将从根结点到每一个叶子结点的路径全都插入到向量中去。代码实现:cl
2017-04-18 12:04:57
262
原创 二叉树的层次遍历
二叉树的层次遍历题目描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)。样例给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]解题思路:利用队列的特性,
2017-04-18 11:53:23
324
原创 等价二叉树
等价二叉树问题描述:检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。样例 1 1 / \ / \ 2 2 and 2 2 / /4 4就是两棵等价的二叉树。
2017-04-09 19:49:38
281
原创 克隆二叉树
克隆二叉树问题描述:深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。样例给定一个二叉树: 1 / \ 2 3 / \4 5返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \4 5解题思路:利用递归算法,前序遍历原二叉树,把遍历到的结点的值赋给相同位
2017-04-09 19:32:38
225
原创 翻转二叉树
翻转二叉树题目描述:翻转一棵二叉树。样例 1 1 / \ / \2 3 => 3 2 / \ 4 4解题思路:利用递归算法,交换左子树和右子树。实现代码:class Solution {public: /** * @param root: a Tr
2017-04-09 19:17:42
162
原创 中序遍历
中序遍历问题描述:给出一棵二叉树,返回其中序遍历。样例给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2].解题思路:用递归算法按照中序遍历访问二叉树的结点,并把访问到的结点值存放到向量中。代码实现:class Solution { /** * @param root: The
2017-04-08 11:27:27
379
原创 前序遍历
前序遍历问题描述:给出一棵二叉树,返回其节点值的前序遍历。样例给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3].解题思路:用递归算法按照二叉树的前序遍历访问树结点,并把访问到的结点的值存在向量中。代码实现:class Solution {public: /**
2017-04-08 11:20:37
297
原创 20153724--1
作业1总结提交作业如图:对此总结:单链表对我来说是一个全新的认识点,它和数组有相似的地方,但是克服了数组的缺点。单链表是动态存储元素的,这使得很多问题得到了更简便的解决办法或者使某些用数组不能解决的问题得到了解决。在做单链表题的过程中,遇到了各种各样的困难,有的是思路打不开,有的是考虑不周,还有细节处理不好导致Runtime Error等错误,但是最后通过多种方法都被解决了(包括上
2017-03-30 21:04:43
211
原创 两两交换链表中的结点
两两交换链表中的结点问题描述:给一个链表,两两交换其中的结点,然后返回交换后的链表。 如给定1->2->3->4->NULL;return 2->1->4->3->NULL.挑战:你的算法只能使用常数的额外空间,并且不能只是单纯的改变结点内部的值,而是需要实际的进行结点交换。 解题思路: 若给定的链表为空或者只有一个结点,则返回原链表即可;若给定的链表至少有2个结点,则需要申请三个
2017-03-30 16:21:26
596
原创 合并两个排序链表
合并两个排序链表问题描述:将两个排序链表合并为一个新的排序链表 如给出 1->3->8->11->15->NULL,2->NULL, 返回 1->2->3->8->11->15->NULL。解题思路:申请一个新结点,从两个链表头开始遍历,若遍历到l1的结点值比较小,则新结点的next指向此结点,这时l1往下继续遍历,l2不变;否则指向l2的结点,l2继续向下遍历,l1不变。以此类推。
2017-03-28 12:59:43
306
原创 中位数
中位数问题描述:给定一个未排序的整数数组,找到其中位数。 中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。 如给出数组[4, 5, 1, 2, 3], 返回 3 ;给出数组[7, 9, 4, 5],返回 5。解题思路:对给定的数组从小到大排序,若为奇数返回中间值,若为偶数返回排序后的第N/2个数。实现代码:class Solution {
2017-03-26 10:45:50
421
原创 链表划分
链表划分问题描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。 你应该保留两部分内链表节点原有的相对顺序。 如给定链表 1->4->3->2->5->2->NULL,并且 x=3 返回 1->2->2->4->3->5->NULL。解题思路:创建两个新链表,分别设为1,2;遍历给定链表,比较每个结点与给定值X值的大小,若比X小,则放入新链表1中
2017-03-26 10:24:18
234
原创 删除排序链表中的重复元素
删除排序链表中的重复元素问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。 如给出 1->1->2->3->3->null,返回 1->2->3->null。解题思路:新申请一个链表空间,将给定链表的第一个结点插进去,然后遍历给定链表的每一个结点,若与新链表的最后一个结点值不等,则把此结点的值赋给新链表的下一个结点,然后继续遍历,否则直接遍历原链表不进行赋值操作。实现
2017-03-26 10:21:13
249
原创 翻转链表
翻转链表问题描述: 翻转一个链表 如给出一个链表1->2->3->NULL,这个翻转后的链表为3->2->1->NULL.解题思路:改变指针链的方向,让当前结点的后一结点指向当前结点,而当前结点指向它的前结点,从原链表的第一个结点开始遍历操作此步骤。实现代码:
2017-03-26 10:01:25
194
原创 链表插入排序
链表插入排序问题描述:用插入排序对链表排序 如给定1->3->2->0->NULL;返回0->1->2->3->NULL.解题思路:申请一个新链表,先把给定结点的第一个结点插进去,遍历之后的结点,与第一个结点比较大小,若较大则插在后面,较小则插在前面,继续遍历,在新链表中找到合适的位置插进去。实现代码: class
2017-03-26 09:41:24
336
原创 在O(1)时间复杂度删除链表节点
在O(1)时间复杂度删除链表节点问题描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。 如给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为 1->2->4。解题思路:把要删除结点的后一结点的值赋给此结点,删除此结点的后一结点。代码实现: class
2017-03-25 19:05:45
546
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人