自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 排序与哈希表总结

哈希表主要要是根据实际情况判断设计算法,而设计的算法基本只针对这一个或一类问题有效。排序问题里面有很多的排序算法,大量数据的算法的时间复杂度是比较重要的。

2017-06-15 17:11:52 656

原创 中位数

问题描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。样例:给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。解题思路:先用sort排序,然后再选取中间的数返回。代码:class Solution {public: /** * @

2017-06-08 17:15:24 192

原创 整数排序 II

问题描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。样例:给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。解题思路:直接一个sort就可以解决。代码:class Solution {public: /** * @p

2017-06-08 17:11:53 152

原创 合并区间

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

2017-06-08 17:03:12 172

原创 整数排序

问题描述:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。样例:对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。解题思路:O(n2)的算法两个for就可以解决,将最小的放到第一个,次小的放在第二个,依此类推。代码:class Solution {public:

2017-06-08 16:54:38 149

原创 最长回文串

问题描述:给出一个包含大小写字母的字符串。求出由这些字母构成的最长的回文串的长度是多少。数据是大小写敏感的,也就是说,"Aa" 并不会被认为是一个回文串。样例:给出 s = "abccccdd" 返回 7一种可以构建出来的最长回文串方案是 "dccaccd"。解题思路:计算每个单词出现的数目,最长即为所有偶数的和加

2017-05-21 10:37:48 445

原创 两数组的交 II

问题描述:计算两个数组的交样例:nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].解题思路:先排序 但是这个是有几个相同的就存几个 ,第二个循环的第一个数只要比要判断的数大就跳出循环。代码:class Solution {public: /** * @p

2017-05-21 10:33:55 96

原创 两数组的交

问题描述:返回两个数组的交样例:nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].解题思路:将两个从小到大数组排序,用双循环控制,并且细节处理用if判断舍去不必要的循环。代码:class Solution {public: /** * @param nums1

2017-05-21 10:24:45 107

原创 快乐数

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

2017-05-21 10:22:29 145

原创 子数组之和

问题描述:给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置样例:给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].解题思路:用循环控制只要和为零就记录始终位置,并且跳出循环.代码:class Solution {public:

2017-05-21 10:14:17 103

原创 哈希函数

问题描述:在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如:hashcode("abcd") = (ascii(a) * 333 + ascii(b) * 332 + ascii(c) *33 +

2017-05-21 10:09:18 233

原创 两数之和

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

2017-05-21 10:01:43 107

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

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

2017-05-20 22:32:01 202

原创 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-20 22:26:59 105

原创 二叉树总结

感想:二叉树主要利用遍历的思想,将各种功能得用遍历结合在一起实现。

2017-04-21 22:43:00 106

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

问题描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。样例:给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 7解题思路:用二分法将数组二分,递归构建一棵树,这样能保证深度最小。代码:/** * Definition of TreeN

2017-04-21 22:35:40 125

原创 二叉树的所有路径

问题描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。样例:给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]解题思路:用两个全局变量的string类型的向量,一个存储数据 一个用来存路径,存数据的时候将整数类型转化成string类型,找到叶子节点

2017-04-20 17:16:15 144

原创 二叉树的层次遍历

问题描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例:给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]解题思路:用两个队列交替使用存储,将根节点放在队列0里,然后用循环取出来将孩子放在

2017-04-20 16:53:42 154

原创 克隆二叉树

问题描述:深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 样例:给定一个二叉树: 1 / \ 2 3 / \4 5返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \4 5解题思路:定义一个根节点,对给定二叉树遍历,同时这个二叉树也跟着遍历

2017-04-20 16:36:58 234

原创 等价二叉树

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

2017-04-20 11:12:50 172

原创 子树

问题描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为T1的子树。样例:下面的例子中 T2 是 T1 的子树: 1 3 / \ / T1 = 2 3 T2 = 4 / 4

2017-04-20 11:07:43 148

原创 将二叉树拆成链表

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

2017-04-20 11:02:14 121

原创 翻转二叉树

问题描述:翻转一棵二叉树样例: 1 1 / \ / \2 3 => 3 2 / \ 4 4解题思路:前序遍历先找到叶子结点,从叶子节点开始往上回溯,每个结点的左子树和右子树交换。代码:/** * Definition of TreeNode: * class Tree

2017-04-20 11:00:51 157

原创 二叉树的最小深度

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

2017-04-20 10:49:09 129

原创 二叉树的最大深度

问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例:给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.解题思路:通过遍历找到根节点到叶子姐结点的每一条路径,并求出它们的长度,用一个变量来存储,记录最大长度,当有更大的时候便存起来。

2017-04-20 10:48:04 122

原创 二叉树的后序遍历

问题描述:给出一棵二叉树,返回其节点值的后序遍历。样例:给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [3,2,1]解题思路:利用后续遍历的递归,将每个结点存储在数组里。代码:/** * Definition of TreeNode: * class TreeNode { * p

2017-04-20 10:42:00 132

原创 二叉树的中序遍历

问题描述:给出一棵二叉树,返回其中序遍历样例:给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2].解题思路:跟前序遍历遍历基本一样只不过先遍历做子树再遍历根节点,最后遍历右子树。代码:/** * Definition of TreeNode: * class TreeNode

2017-04-20 10:38:21 172

原创 二叉树的前序遍历

问题描述:给出一棵二叉树,返回其节点值的前序遍历。样例:给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3].解题思路:定义一个向量变量,然后用递归的方式调用前序遍历函数,将每次访问的节点值都加在向量变量里。代码:/** * Definition of TreeNode:

2017-04-20 10:33:43 252

原创 二叉树的最大节点

问题描述:在二叉树中寻找值最大的节点并返回。样例:给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。解题思路:用一个全局变量来存储最大值,然后遍历一次每次碰到比全局变量大的值,将该值赋值给全局变量。代码:class Solution {pu

2017-04-20 10:27:21 230

原创 链表专题总结

专题总结:虽然做题不算太多,但对链表有了一定了解,并能熟悉的进行简单插、删、查、改的操作,链表题比数组算法相对简单一点。

2017-03-30 17:30:10 116

原创 翻转链表

问题描述:翻转一个链表样例:给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null解题思路:用三个指针来保留位置,将中间的next指向前一个节点,然后三个节点按原来的顺序依次后移一位,完成循环就可以了。代码:/** * Definition of ListNode *  * class ListNode { *

2017-03-30 17:23:56 110

原创 链表划分

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

2017-03-30 17:15:15 137

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

问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例:给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null解题思路:用两个指针节点一次往后迭代,其中一个在前边,另个在后边两个紧挨着,先固定一个动,另一个往后移知道碰到与前面数据不一样的的就将中间的全

2017-03-30 17:00:26 289

原创 合并两个排序链表

问题描述:将两个排序链表合并为一个新的排序链表。样例:给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。解题思路:先考虑特殊情况,如果一个链表为空,直接返回另一个链表;一般情况,新建一个链表,用两个指针分别从两个链表开始迭代,将数据小的放在新链表的后面并且指针后移一位,如果某一个指针指向NUL

2017-03-30 16:29:07 158

原创 链表求和

问题描述:你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。样例:给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null实现思路:新建一个链表,用一个循环将两个链表的数挨个相加取余保留,除以10进位,求和的时候加上

2017-03-29 21:37:52 163

原创 链表插入排序

问题描述:用插入排序对链表排序。样例:Given 1->3->2->0->null, return 0->1->2->3->null.思路:新建一个链表,按从小到大顺序排列,从原列表代码:/** * Definition of ListNode * class ListNode { * public: *     int val; *

2017-03-26 22:28:03 154

原创 链表倒数第n个节点

问题描述:找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例:给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.思路:用循环数一下链表中元素的个数,然后再用循环找到倒数第n个结点就可以了。代码:/** * Definition of ListNode * class ListNode {

2017-03-26 22:13:54 208

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

问题描述:给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例:给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null。思路:用一个循环数清楚这个链表有几个元素,在循环找到倒数第n+1个元素和倒数第n个元素,然后删除就可以了。代码:/** * Defi

2017-03-26 22:08:27 433

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

问题描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。样例:给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。

2017-03-26 21:59:51 173

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

在O(1)时间复杂度删除链表节点问题描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。样例:给定 1->2->3->4,和节点 3,删除3 之后,链表应该变为 1->2->4。实现思路:因为给定节点在链表的中间,所以不可能用一步步迭代找到这个节点的前驱

2017-03-22 21:52:10 165

空空如也

空空如也

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

TA关注的人

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