自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 排序问题总结

数据结构也结课了,自己正好把排序又复习了一遍,理解起来不说很难。自己又静下来梳理了一下,感觉排序的问题挺有趣的,可能还是归结于自己能看懂了的原因吧。直接插入排序,改进的希尔排序;冒泡排序,改进后的快速排序;选择排序,在这里又引进了堆的概念,改进为堆排序;最后有归并排序,以及基数排序。做题的时候,看到别的同学排序时也没用新学的知识,直接用了sort函数。数据结构结课了,但是对程序设计的学习还要努力,

2017-06-18 21:17:07 245

原创 中位数

问题描述:给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。样例:给出数组[4, 5, 1, 2, 3], 返回 3给出数组[7, 9, 4, 5],返回 5实现思路:用sort()函数对数组排序,判断数组长度,若是偶数就返回第N/2个数,若是奇数返回中间值。实现代码:clas

2017-06-10 10:33:10 421

原创 整数排序 II

问题描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。样例:给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。实现思路:

2017-06-08 17:24:09 238

原创 整数排序

问题描述:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。样例:对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。实现思路:我选用了直接插入排序算法,遍历数组,从A[i]开始往前比,如果遇到A[i]实现代码:class Solution {public:    /**   

2017-06-08 16:42:33 226

原创 两数之和

问题描述:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].实现思路:一看这道题出来的

2017-05-21 15:01:18 191

原创 两数组的交

问题描述:返回两个数组的交样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].实现思路:将两个数组排序,然后nums1中的每个元素依次和nums2中元素进行比较,若相等就存入向量A中。如果nums1和nums2中有重复的只需要比较一个。且因为经过排序,若nums1中某个元素比nums2 中某位置的小,那么一定比nums2中此

2017-05-21 14:17:26 196

原创 快乐数

问题描述:写一个算法来判断一个数是不是"快乐数"。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。样例:19 就是一个快乐数。1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1

2017-05-21 13:37:50 346

原创 二叉排序树总结

对于二叉排序树并不难于理解,它和中序遍历完美契合,应用起来感觉很舒服。做的这两道题目,第一个就是二叉排序树的基本操作插入。二叉排序树的插入操作比较简单,但是它的删除操作比较复杂,需要好好掌握。通过这两个题目,可以看出来递归思想的重要性,用它来解决题目方便简洁。还有我们后面学的平衡二叉树,虽然自己代码写不出来,但是理解的还可以,平衡二叉树的调整还是很有意思。现在对程序语言的兴趣挺浓厚,要加强学习。

2017-05-21 09:59:12 989

原创 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 in BST.

2017-05-21 09:40:47 218

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

问题描述:给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。样例给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / \1 4 --> 1 4 / / \ 3 3

2017-05-21 09:12:21 268

原创 二叉树总结

学链表那部分的时候感觉还行,自己感觉跟以前的C++内容联系不多。学二叉树这部分明显感觉出学的不好了,从开始学的时候说到递归这个词,就感觉有点懵啊。我当时回来看了以前的C++课本,看了递归调用那部分的内容。说到做题,一开始前面的那些题自己还有想法,能写个八九不离十。在后面写的这几个,都是写不下去,在网上搜了代码或者看同学的,然后自己捣鼓明白写上的。通过做题可以看到,二叉树这部分题目用递归来写真的很方

2017-04-22 14:03:39 138

原创 子树

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

2017-04-22 13:26:18 144

原创 二叉树的路径和

问题描述:给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。

2017-04-22 13:14:04 235

原创 二叉树的所有路径

问题描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。样例:给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]实现思路:前序遍历二叉树将从根节点到叶子节点的路径都存放到向量中去。实现代码: * Definition of Tree

2017-04-21 21:03:26 237

原创 将二叉树拆成链表

问题描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。样例: 1 \ 1 2 / \ \ 2 5 => 3 / \ \ \ 3 4 6

2017-04-21 20:10:55 178

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

问题描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。样例:给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 7实现思路:首先找到这个数组的中值,将这个中值赋值给根节点,此时中值以左的数据都比中值小了,运用递归用这段数组构建左子树;中值以右的数据都比中值大

2017-04-21 16:40:28 222

原创 二叉树的层次遍历

问题描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例:给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]实现思路:创建一个队列,首先将根节点入队,定义一个向量level

2017-04-19 21:17:32 252

原创 翻转二叉树

问题描述:翻转一棵二叉树样例 1 1 / \ / \2 3 => 3 2 / \ 4 4实现思路:从根出发开始操作,如果要操作的节点是空值,则不进行任何操作;否则,交换左右儿子,这里新建一个temp变量作为过渡。然后利用递归算法,分别对左右子树进行处理。实现代码:/** * Def

2017-04-15 20:55:56 293

原创 克隆二叉树

问题描述:深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。样例:给定一个二叉树: 1 / \ 2 3 / \4 5返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \4 5实现思路:运用递归算法,采用前序遍历法遍历二叉树的每一个节点,并同时建立一个新节点

2017-04-15 20:28:02 215

原创 二叉树的最大节点

问题描述:在二叉树中寻找值最大的节点并返回。样例:给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。实现思路:在函数外定义一个新节点max,并赋一个很小的初始值。用一种遍历方法(我用的是前序遍历)遍历二叉树的节点,将当前节点的值与定义的节点max的值进行比较,若当前节点的值比

2017-04-15 15:48:10 2047

原创 等价二叉树

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

2017-04-13 16:51:40 288

原创 二叉树的最小深度

问题描述:给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。样例:给出一棵如下的二叉树:        1     /     \    2       3          /    \        4      5  这个二叉树的最小深度为 2实现思路:一分为二,分别求二叉树的

2017-04-13 16:31:41 199

原创 二叉树的最大深度

问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例:给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.实现思路:要求二叉树的最大深度,首先判断二叉树是否为空,若为空,则深度为0。如果不为空,分别求左子树的深度和右子树的深度,取最大的那一个加1,即为二

2017-04-11 17:52:23 338

原创 二叉树的后序遍历

问题描述:给出一棵二叉树,返回其节点值的后序遍历。样例:给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [3,2,1]实现思路:

2017-04-11 17:28:42 196

原创 二叉树的中序遍历

问题描述:给出一棵二叉树,返回其中序遍历样例:给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2].

2017-04-11 17:23:45 167

原创 二叉树的前序遍历

问题描述:给出一棵二叉树,返回其节点值的前序遍历。样例:给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3].实现思路:由二叉树前序遍历的操作定义,用递归算法访问二叉树的节点,并将访问的节点的值存放在向量v中,返回向量v。实现代码:/** * Definition of TreeNo

2017-04-11 17:12:28 201

原创 有效的括号序列

问题描述:给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' and ']', 判定是否是有效的括号序列。样例:括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]"则是无效的括号。实现思路:利用栈“后进先出”的性质。                (1) 如果所给的括号序列长度为0或者是奇数,那么括

2017-04-09 17:26:27 525

原创 链表做题总结

学习数据结构,重拾C++,对我来说心里真的很没底,以前的C++没认真学,就是擦着及格线过的。自己基础薄弱,我当时就担心会听不明白,但是上课听的时候,感觉理解的还可以。     对于链表这方面知识,通过做题,我的一些总结和想法如下。首先我想到的就是要掌握好链表基础的一些操作,插入、删除、按位查找、按值查找等。一些题目都是这些基础操作的变化。     其次就是指针的链接问题,这个很重要,也是我

2017-03-31 15:26:25 221

原创 链表划分

问题描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例:给定链表 1->4->3->2->5->2->null,并且 x=3          返回 1->2->2->4->3->5->null实现思路:这个题要搞懂题意,将链表划分并且不改变原来元素之间的相对顺序。我总体的思路是,建

2017-03-31 15:00:15 287

原创 链表求和

问题描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例:给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null实现思路:由题意整数在链表中的存储是原来整数中相反的顺序,所以考虑申请一个新链表,让原来两个链表对应位置相

2017-03-31 13:58:48 274

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

问题描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点样例:给出链表1->2->3->4->5->null和 n = 2.           删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.实现思路:这个问题跟“链表倒数第n个节点”类似,此问题要返回头结点,所以重新定义了一个新结点,并让开始结点赋值给它,以便返回。      首先考虑了链表中只

2017-03-30 22:01:59 228

原创 合并两个排序链表

问题描述:将两个排序链表合并为一个新的排序链表样例:给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。实现思路:这个题首先要建一个新链表,对于新链表的头结点就是L1或L2中较小的那一个,在比较完头结点之后,

2017-03-30 21:41:46 253

原创 翻转链表

问题描述:翻转一个链表样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null实现思路:

2017-03-29 21:36:30 173

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

问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例:给出 1->1->2->null,返回 1->2->null            给出 1->1->2->3->3->null,返回 1->2->3->null实现思路:为了实现操作,我设置了两个指针变量p和q,让p指向开始结点,让q指向第二个结点,即这两个指针一前一后分别指向两个数据元素。然后重复执行下述操

2017-03-27 21:52:11 297

原创 链表插入排序

问题描述:用插入排序对链表排序样例:Given 1->3->2->0->null, return 0->1->2->3->null实现思路:本题要用插入排序对链表进行排序,首先考虑特殊情况,当链表是空的时候,直接返回0;若不是,就申请一个新的链表,首先将给定链表的第一个节点插进去,然后遍历它后面的节点,若比它小,则插在前面,否则,插在后面。实现代码: * Definition of

2017-03-27 21:41:16 179

原创 链表倒数第n个节点

问题描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例:给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.实现思路:解决这个问题,首先要求出单链表的长度,用一个while循环,将单链表扫描一遍即可实现;然后要返回倒数第n个节点的值,因为是单链表,所以只能从前往后查找,而倒数第n个节点的位置是(长度-n+1),然后接下来的操作就是单链表中的

2017-03-27 20:30:49 256

原创 删除链表中的元素

问题描述:删除链表中等于给定值val的所有节点。样例:给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。实现思路:因为返回时需要返回头指针,而在查找链表中等于给定值val的所有节点时,必然需要一个指针进行遍历,所以重新申请了一个结点dummy,并让dummy的next 域指向head,然后将dummy赋给

2017-03-26 16:33:38 1549 1

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

问题描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在O(1)时间复杂度删除该链表节点。样例:给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为 1->2->4。实现思路:因为要删除的结点位于链表的中间,并且只是给定了要删除的元素的值,所以不能从头开始遍历找到这个元素的前驱。那么就可以把这个等待被删除的元素的后继的值赋给这个元素,然后让它的指针域指

2017-03-26 13:52:37 405

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

问题描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。实现思路:1.先判断链表开始结点是否为空,若是,直接返回0;                  2.若不是,重复执行下述操作,直到p为空或p的下一个结点为空。                  (1)定义一个工作指针p,将head赋值给p;                          定义变量x,暂存结点p的数据

2017-03-26 10:54:38 349

空空如也

空空如也

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

TA关注的人

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