- 博客(38)
- 收藏
- 关注
原创 对排序问题的总结
总结:这一章学了很多排序的方法,排序的时间复杂度慢慢减少,代码也愈来愈恶复杂,需要记住的代码挺多的,其实懂了原理理解了代码内容,做这一张的题挺简单的,结合stl中的知识,难度不是很大,因为有许多排序在大一已经提到过了,就多了几个新的排序,比如快速排序,归并排序,堆排序等等。还是那句话,多写代码,就会了。
2017-06-10 16:05:33 479
原创 两数组的交||
问题描述:计算两个数组的交解题思路:就是在两数组的交的基础上,不用将重复再重复的元素删掉实现代码:class Solution {public: /** * @param nums1 an integer array * @param nums2 an integer array * @return an integer array
2017-06-10 15:53:59 180
原创 两数组的交
问题描述:返回两个数组的交解题思路:对两个向量里的元素排序,然后将两个向量里的元素进行比较,如果找到有两个相等的,在判断是否还有,将找到的元素插入到另一个新的向量里,然后用temp记录当前元素,便于后面的判断,两个元素不相等,继续向下找。实现代码:class Solution {public: /** * @param nums1 an integer
2017-06-10 15:44:19 240
原创 整数排序
问题描述:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。解题思路:很简单的一道题,这里用了冒泡排序实现代码:class Solution {public: /** * @param A an integer array * @return void */ void so
2017-06-10 15:39:58 233
原创 整数排序2
问题描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法解题思路:运用了快速排序实现代码:class Solution {public: /** * @param A an integer array * @return void */ void sortIn
2017-06-10 15:36:57 244
原创 中位数
问题描述:给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。解题思路:对原数组进行排序,然后模2,找到中位数就好了实现代码:class Solution {public: /** * @param nums: A list of integers.
2017-06-10 15:31:38 200
原创 二叉排序树和哈希表的学习总结
数据结构学了很长时间了,虽然现在还是迷迷糊糊,但是感觉还和大一差不多,多写代码,就能理解许多了。现在学到了二叉排序树和哈希表,我感觉没有啥新东西,二叉排序树,就是在二叉树上的限制了一下,多了一些条件,是二叉树变得特别一点,关于二叉排序树就做了两个题,还跟以前写的程序差不多吧,对于哈希表,再写代码的时候,我感觉没有用到书上的知识,感觉还是用到以前大一的知识多,把哈希表的题放在以前感觉也能做,这两部分
2017-05-21 20:14:39 829
原创 两数组的交 和 两数组的交||
题目描述:计算两个数组的交解题思路:这两个题我放在一起了,只要会两个数组的交就行了,两个数组的交||几乎一样,就是删了一点代码,先分别对两个数组排序,然后分别比较两个数组的元素,如果有相同的元素插入到新的数组里,将这个数保存起来,用于后面去掉重的元素,如果两个元素不一样,继续比较剩下的元素。两个数组的交||将去掉重元素的代码删去就行了实现代码:class Solution {pub
2017-05-21 16:36:34 234
原创 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 16:35:17 185
原创 两数之和
题目描述:解题思路:建立一个新的向量,在原来向量里用两个for循环寻找与给定值相等的两个数的和,将这两个数的位置插入到新的向量里就行了实现代码:class Solution {public: /* * @param numbers : An array of Integer * @param target : target = numbers[in
2017-05-21 16:28:17 165
原创 快乐数
题目描述:写一个算法来判断一个数是不是"快乐数"。一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。解题思路:首先找几个数试一下,发现如果计算过程中出现4那么不是快乐数实现代码:class Solution {public:
2017-05-21 16:27:07 279
原创 在二叉查找树中插入节点
题目描述:给一个二叉查找树和一个新的节点,讲节点插入到二叉查找树中。解题思路:根据二叉排序树的特点,用递归函数插入节点就行了。实现代码:class Solution {public: /** * @param root: The root of the binary search tree. * @param node: insert this n
2017-05-21 16:20:18 245
原创 对二叉树学习的总结
经过一上一次写完链表的题之后,写代码的感觉渐渐回来了,不再像开始那么生疏了,对于二叉树稍微比链表的难一些吧,但是掌握好基本的就发现不会很难,二叉树基本的是什么,我感觉就是二叉树的遍历,从写的代码来看,很多都是用了遍历,而且还要明白递归函数的使用方法,然后更进一步的学会如何使用栈和队列来实现不同问题的解决,在这一章,在写代码时候,一定用理解局部变量与全局变量的使用,要不然很容易不过。做题的时候感觉思
2017-04-23 10:44:05 7592
原创 把排序数组转换为高度最小的二叉搜索树
问题描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。 注意事项There may exist multiple valid solutions, return any of them.您在真实的面试中是否遇到过这个题? Yes样例给出数组 [1,2,3,4,5,6,7], 返回
2017-04-22 14:03:41 213
原创 将二叉树拆成链表
问题描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出。您在真实的面试中是否遇到过这个题? Yes样例 1
2017-04-22 13:57:57 179
原创 子树
问题描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。 注意事项若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。您在真实的面试中是否遇到过这个题?
2017-04-22 13:51:42 191
原创 二叉树的路径和
题目描述:二叉树的路径和 描述 笔记 数据 评测给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。您在真实的面试中是否遇到过这个题? Yes样例给定一个二叉树,和 目标值 = 5: 1 / \
2017-04-21 19:11:02 223
原创 二叉树的所有路径
题目描述:二叉树的所有路径 描述 笔记 数据 评测给一棵二叉树,找出从根节点到叶子节点的所有路径。您在真实的面试中是否遇到过这个题? Yes样例给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5",
2017-04-21 19:02:30 207
原创 二叉树的层次遍历
问题描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? Yes样例给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]解题思
2017-04-21 18:55:09 481
原创 翻转二叉树
问题描述:翻转一颗二叉树解题思路:先遍历二叉树,然后将二叉树左右子树的值交换,用swap函数,或者自己写交换两个节点的值得代码实现代码:class Solution {public: /** * @param root: a TreeNode, the root of the binary tree * @return: nothing *
2017-04-15 18:07:40 247
原创 等价二叉树
题目描述:检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。解题思路:用递归函数分别遍历两颗二叉树,由于题目返回类型是bool,直接递归判断两颗树的节点的值是否一样就行了。实现代码:class Solution {public: /** * @aaram a, b, the root of binary
2017-04-15 18:04:20 222
原创 克隆二叉树
问题描述:深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。解题思路:建立一个新的根节点,然后遍历第一棵子树,将遍历的左右节点赋值给新的根节点即可实现代码:class Solution {public: /** * @param root: The root of binary tree * @return root
2017-04-15 18:00:24 179
原创 二叉树的最小深度
问题描述:给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。解题思路:处理特殊的子树,空树返回0,只有根节点返回1,邪数遍历一边的节点个数就好了,左右子树都有将二叉树的最大深度改一下就好了实现代码:class Solution {public: /** * @param root: The root of bin
2017-04-15 17:55:29 238
原创 二叉树的最大深度
问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离解题思路:分别遍历左右的子树,然后比较左右子树的深度,返回较大的那个实现代码:class Solution {public: /** * @param root: The root of binary tree. * @return: An integer
2017-04-15 17:51:20 168
原创 二叉树的最大节点
题目描述:在二叉树中找到值最大的节点并输出解题思路:将递归函数将二叉树遍历一遍,将节点与已知的值比较即可实现代码:class Solution {public: /** * @param root the root of binary tree * @return the max node */ TreeNode* max=new
2017-04-15 17:44:11 388
原创 二叉树的前序、中序、后序遍历
问题描述:给出一棵二叉树返回其节点值得前序遍历解题思路:写一个递归函数,将每一次遍历的节点放在vector里,前序遍历完成后,将vector里的值输出即可实现代码:class Solution {public: /** * @param root: The root of binary tree. * @return: Preorder in vect
2017-04-15 17:31:25 189
原创 对链表学习的总结
总结感想:首先我想说一开始我觉的链表这个东西特别难,因为它涉及到了指针,指针在学习c++的时候就没学好,感觉特别难,然后在看代码的时候就是感觉什么都不会,根本看不懂,然后接触链表一段时间后,还是有一些疑惑,但是渐渐的开始了有些感觉,能稍微看懂一些代码了,随着跟随老师的学习,能对链表和指针有一些领悟了,然后就开始写关于链表的程序了,写关于链表的程序的时候,思路是有一些,但是就是不知道怎么下手去写,先
2017-03-29 20:03:14 3038
原创 链表求和
问题描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例给出两个链表 3->1->5->null 和5->9->2->null,返回8->0->8->null解题思路:新建一个链表里面的节点其实就是其他两个节点加和对10取余数。在设置一个整型变量对加
2017-03-29 19:47:09 287
原创 链表插入排序
问题描述:用插入排序对链表排序。样例Given 1->3->2->0->null, return0->1->2->3->null解题思路:就是建立一个新的链表,先将所给链表的一个节点放到新链表里,这个新链表就有可以比较的节点了,用给定的链表依次和新链表的节点比较,值比新链表的节点值大就插在后面,小就插在前面,这样新的链表就是一个有序链表了。实现代码:class Solu
2017-03-29 19:15:24 294
原创 两两交换链表中的节点
问题描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。样例给出 1->2->3->4, 你应该返回的链表是2->1->4->3。解题思路:现在链表最前面建立一个节点用于输出最后的链表,然后找到下两个节点交换两个节点的值,然后再找到下两个,如果链表节点个数是奇数用条件语句判断就可以了。实现代码:class Solution {public: Lis
2017-03-29 19:03:06 194
原创 删除排序链表中的重复元素
问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例给出 1->1->2->null,返回1->2->null给出 1->1->2->3->3->null,返回1->2->3->null解题思路:遍历链表中的元素,从第一个结点开始与第二个节点的值进行比较,相等的话就用第三个节点覆盖第二个节点,不相等,找下一个节点,依次遍历下去就可以;实
2017-03-29 18:53:33 239
原创 合并两个排序链表
问题描述:将两个排序链表合并为一个新的排序链表样例 给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。解题思路:遍历第二个链表的每一个节点,然后与第一个节点的第一个节点比较,如果第二个链表节点的值小于第一个,就插入到第一个链表里,如果大于就到下一个节点。然后依次遍历第二个链表的每个节点,便利完成就合成
2017-03-29 18:40:57 211
原创 链表划分
问题描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例给定链表 1->4->3->2->5->2->null,并且 x=3返回 1->2->2->4->3->5->null解题思路:可以新建两个链表,一个链表存放比给定值小的元素,另一存放比给定值大的元素。最后将存放比给定值的链表接在比给定值
2017-03-27 22:23:28 188
原创 删除链表中的元素
题目描述:给出链表1->2->3->3->4->5->3, 和 val =3, 你需要返回删除3之后的链表:1->2->4->5。解题思路:设置一个头结点,然后依次从一第一个结点开始遍历,当与给定结点值相等时,后一个元素覆盖前一个即可,依次向下遍历实现代码:class Solution {public: ListNode *removeElements(ListNod
2017-03-27 20:39:15 210
原创 翻转链表
题目描述:翻转一个链表 样例 给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null解题思路:看了老师的代码,很长时间才明白过来,就是先将前一个结点的下一个结点保存起来再让第一个结点覆盖下一个,让保存的结点再覆盖第一个结点,前两个结点的顺序就换了,后面的一次遍历就行了。实现代码:class Solution {public: ListNode
2017-03-27 20:13:00 221
原创 删除链表倒数第n个元素
问题描述:给定一个链表,删除链表中倒数第n个结点,返回链表的头结点 如给定1->2->3->4->5->NULL和2,返回1->2->3->5->NULL.解题思路:这题与找到链表第n个元素差不多,就多了一步删除,设置两个指针,一个指针先走到指定位置,另一个与现在这个指针一起走,找到结点后,一个覆盖另一个即可解题思路:class Solution {public: L
2017-03-26 21:43:47 465
原创 链表倒数第n个数
问题描述:找到链表中的倒数第n个结点,返回它的值 如给定3->2->1->5->NULL和2,返回1。解题思路:设置两个指针,先让第一个指针跑到指定的位置,此时第二个指针和第一个指针一起跑,跑的快的指针到达NULL时,另一个指针就指向要找的结点了。实现代码:class Solution {public: ListNode *one=head; w
2017-03-26 21:34:10 338
原创 在O(1)时间复杂度删除链表节点
问题描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。 如给定 1->2->3->4,和节点 3,删除 3 之后,链表应该变为 1->2->4。解题思路:由问题描述知道肯定不能遍历找到该结点,那么就直接将头指针指向要删除结点的下一个结点,将下一个结点覆盖前一个结点,删除该结点,将给定结点和此结点的下一个结点连接即可。代码实现:
2017-03-26 21:22:29 228
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人