自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(38)
  • 收藏
  • 关注

原创 排序专题总结

排序的方法有很多,主要学习了直接插入排序,希尔排序,快速排序,堆排序,归并排序,分配排序等。通过本专题的练习,发现排序的方法多种多样是非常灵活的。对于算法没太大要求,除了时间复杂度的限制。而且通过排序可以更容易地解决其他应用问题。

2017-06-11 21:50:41 165

原创 中位数

问题描述:给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。样例给出数组[4, 5, 1, 2, 3], 返回 3给出数组[7, 9, 4, 5],返回 5思路:首先对数组进行排序,然后判断数组的个数,返回中位数。代码:class Solution {public: /**

2017-06-08 17:57:04 152

原创 合并区间

问题描述:给出若干闭合区间,合并所有重叠的部分。样例给出的区间列表 => 合并后的区间列表:[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18] ]

2017-06-08 17:38:59 204

原创 整数排序2

问题描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的算法。样例给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。思路:题目限制为时间复杂度为O(n log n),sort()函数满足。代码:class Solution {public: /** * @par

2017-06-08 16:54:06 149

原创 两数组的交2

问题描述:计算两个数组的交

2017-06-08 16:37:52 132

原创 两数组的交

问题描述:返回两个数组的交样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].思路:先将两数组排序,再遍历两数组,找到两数组中相同的元素。注意重复的元素只返回一个。代码:class Solution {public: /** * @param nums1 an integer array * @

2017-06-07 22:08:53 125

原创 两数之和

1.问题描述:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。                  你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。样例给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。2.思路:双重循环,判断

2017-06-01 17:20:25 203

原创 整数排序

问题描述:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。                   样例对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。思路:最基本的几个O(n2)的排序算法,选择排序,冒泡排序和插入排序。冒泡排序,遍历数组,把当前数字的后面所有的数字都遍历一遍,遇到小的跟当前数字交换, 

2017-06-01 16:52:35 453

原创 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         than the original key

2017-05-18 17:18:37 165

原创 在二叉查找树中插入节点

问题描述:给定一棵二叉查找树和一个新的树节点,将节点插入到树中。                   你需要保证该树仍然是一棵二叉查找树。思路:有题目可知,利用递归的思想。先判断二叉树是否为空,若空直接将节点赋值给根节点并返回;            否则判断插入节点与根节点值的大小,若小于根节点,判断左节点是否为空,若空,赋节点值,若非空,递归调用原函数,           若

2017-05-18 16:56:56 304

原创 二叉树专题总结

总结:二叉树感触最多的是递归的调用,降低了代码的复杂性,很好的解决了问题。还有二叉树与栈,队列,数组的结合应用。        递归函数看似简单,但需要对问题良好的分析能力。刚开始的前序,中序,后序遍历还是比较简单的,后面的需要结合新的函数共同解决问题。印象很深的是二叉树的所有路径和判断是否是子树,完全没有思路,在网上搜到答案后觉得不是很难,但是自己没有想出来。了解了这些题,感觉二叉树还是

2017-04-21 17:09:56 142

原创 二叉树的路径和

问题描述:给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。样例给定一个二叉树,和 目标值 = 5: 1 / \ 2 4 / \ 2 3返回:[ [1, 2, 2], [1, 4]]思路:我们遍历从根节点到叶子的所有路径,定义sum为路径经过

2017-04-21 17:08:41 353

原创 二叉树的层次遍历

问题描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]思路:层次遍历的顺序是从上到下,从左到右。本题小的不同是将每层的节点放到一个数组里,再将所有层放到一个空间中

2017-04-20 23:12:07 314

原创 子树

问题描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。注意事项:若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。样例下面的例子中 T2 是 T1 的子树: 1

2017-04-20 22:39:49 189

原创 二叉树的所有路径

问题描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。样例给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]思路:因为返回类型是vector,故需要建立新的函数而且需要将root的val类型转换为string类型,用到函数to_string(int)。   

2017-04-20 22:03:04 152

原创 把排序数组转换为高度最小的二叉搜索树

问题描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。                   注意事项There may exist multiple valid solutions, return any of them.样例给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1

2017-04-19 22:08:08 171

原创 将二叉树拆成链表

问题描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。样例 1 \ 1 2 / \ \

2017-04-18 22:28:17 143

原创 二叉树的最大节点

问题描述:在二叉树中寻找值最大的节点并返回。样例给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。思路:建立新的节点temp用来储存遍历的最大的节点。需注意temp为全局变量,要在public中,或使用引用。           用前序遍历遍历所有节点。判断当前节

2017-04-17 21:35:56 645

原创 等价二叉树样例 1 1 / \ / \ 2 2 and 2 2 / / 4

问题描述:检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。样例 1 1 / \ / \ 2 2 and 2 2 / /4 4思路:两个二叉树中相同位置有一个是空,另一个非空或者数值

2017-04-17 20:41:57 164

原创 翻转链表

问题描述:翻转一棵二叉树。样例 1 1 / \ / \2 3 => 3 2 / \ 4 4思路:创建新链表temp用来储存root的左子树或右子树,根节点左节点变成右节点,右节点变成左节点。           然后一层层递归下去。代码:/** * Definition of

2017-04-17 20:06:47 154

原创 克隆二叉树

问题描述:深度复制一个二叉树。                  给定一个二叉树,返回一个他的 克隆品 。给定一个二叉树: 1 / \ 2 3 / \4 5返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \4 5思路:建立一个新节点存放当前给出的节点的值,新建的左节点等于给出

2017-04-17 19:44:20 110

原创 二叉树的最小深度

问题描述:给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。样例给出一棵如下的二叉树:        1     /     \    2       3          /    \        4      5  这个二叉树的最小深度为 2思路:递归的思想。求二叉树的最小深度,就到NULL的 时候停止,那么就要

2017-04-11 17:22:09 113

原创 二叉树的最大深度

问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.思路:总体是递归的思想。一步步求出左右子树中最大的深度,再加上上一次的。代码:/** * Definition of TreeNode: * class Tree

2017-04-11 16:32:58 127

原创 二叉树的后序遍历

问题描述:给出一棵二叉树,返回其节点值的后序遍历。                     样例给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [3,2,1]思路:递归的思想。并用到了向量。            建立向量,储存遍历的元素,最后返回向量。            后序遍历是先访问左子树,后访

2017-04-09 21:21:42 268

原创 二叉树的中序遍历

问题描述:给出一棵二叉树,返回其节点值的前序遍历。思路:与前序遍历相同,利用递归思想。然后建立向量用于储存节点值和返回这个向量。区别是中序遍历是先访问根节点的左子树,后访问根节点,最后为右子树。           左右子树重复上述过程。代码:/** * Definition of TreeNode: * class TreeNode { * public: *    

2017-04-09 21:09:36 197

原创 二叉树的前序遍历6

问题描述:给出一棵二叉树,返回其节点值的前序遍历。                   给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3].思路: 利用递归的思想。建立一个独立的向量,用于储存遍历过的元素,最终返回向量,可得到二叉树的前序遍历。         前序遍历是先遍历根节点,将根节点

2017-04-09 20:43:58 197

原创 链表专题总结

一共做了十一道题,通过这几道题,我对链表有了大大的了解,从刚开始看见一个题目很懵,到最后读完题幕后有自己的思路,每次搞定一个程序有很大的成就感,越来越能感受到它的乐趣。通过这几道题加深了理解,将混淆的概念区分开来了。还有很多有趣的思路,翻转链表的头插法和插入排序,还有链表的求和。出错提醒:指针指向的位置;NULL的利用;指针的创立和移动;多种情况的思考。

2017-03-31 14:36:43 186

原创 链表求和

问题描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加, 用链表形式返回和。                   样例:给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null思路:本题的难点是满十进一的问题。分为以下几种情况:   

2017-03-31 14:26:33 211

原创 合并两个排序链表

问题描述:将两个排序链表合并为一个新的排序链表                   样例:给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。思路:创建新的链表将两个链表的节点插到新链表中去。           1)l1或l2为NULL时,新链表插入的是非空的链表。           2)l1,l2都不为n

2017-03-31 14:08:18 140

原创 链表插入排序

问题描述:用插入排序对链表排序                   样例:Given 1->3->2->0->null, return 0->1->2->3->null 解题思路:主要思路为建立一个新链表将原链表中的节点依次插入新链表中,

2017-03-31 13:53:53 182

原创 翻转链表

问题描述:翻转一个链表                   样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null思路:利用了头插法。大体思路为创建空链表,再将原链表中的节点依次插到null的前面。             具体是:创建null来生成新链表,创建新链表temp储存head,防止数据丢失。             head->nex

2017-03-31 00:38:53 280

原创 在o(1)时间复杂度删除链表节点

问题描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。                  样例:给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为 1->2->4。思路:因为已经把要删除的节点给出了。题目就比较简单了。把node的下一个节点的val赋值给node,再让node指向node的下下个节点,就把node的值和地

2017-03-31 00:19:26 238

原创 两两交换链表中的节点

问题描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。                   样例:给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。思路:创建新链表,使有两个指针。只需将两个节点的数值互相交换,然后head指向下一个节点的下一个节点,进行下两个节点的交换。            最后返回dummy->next返回新生成的链表。代码:/

2017-03-31 00:05:00 133

原创 删除链表中倒数第n个节点

问题描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。                   (注意事项:链表中的节点个数大于等于n)                   样例:给出链表1->2->3->4->5->null和 n = 2.                               删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.

2017-03-30 17:03:30 171

原创 链表划分

问题描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。                    你应该保留两部分内链表节点原有的相对顺序。                  样例:给定链表 1->4->3->2->5->2->null,并且 x=3                              返回 1->2->2->4->3->5->nul

2017-03-30 16:41:23 163

原创 链表倒数第n个节点

问题描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n。                    样例:给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.解题思路:创建新链表来创建两个指针dummy和head,用head遍历链表得出链表的长度。                   用dummy进行for循环,遍历到第sum-1个节点,就得到倒数第

2017-03-29 23:58:28 201

原创 删除链表中的重复元素

问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。                 样例:给出 1->1->2->null,返回 1->2->null                                 给出 1->1->2->3->3->null,返回 1->2->3->null解题思路:链表是已经排好序的,用循环遍历链表,判断当前指针指向的节点的

2017-03-29 23:12:02 172

原创 删除链表中等于给定值val的所有节点

问题描述:删除列表中的元素。如给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。解题思路:

2017-03-27 00:06:20 707

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除