- 博客(49)
- 收藏
- 关注
原创 爬楼梯
问题描述假设你正在爬楼梯,需要n步你才能到达顶部。但每次你只能爬一步或者两步,你能有多少种不同的方法爬到楼顶。样例比如n=3,1+1+1=1+2=2+1=3,共有3种不同的方法返回 3解题思路状态转移方程a[i]=a[i-1]+a[i-2];代码class Solution {public: /** * @par
2017-11-07 12:14:52
192
原创 数字三角形
问题描述给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。样例比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小路径和为11 ( 2 + 3 + 5 + 1 = 11)。解题思路这个题为了考虑空间复杂度,要从下向上考虑代码
2017-11-07 12:14:00
229
原创 最小路径和
问题描述:给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。 注意事项你在同一时间只能向下或者向右移动一步解题思路:状态转移方程 a[i][j]= a[i][j]+max{}a[i-1][j],a[i][j-1]},注意变得情况会简化代码class Solution {public: /*
2017-11-07 12:05:40
338
原创 栅栏染色
问题描述:我们有一个栅栏,它有n个柱子,现在要给柱子染色,有k种颜色可以染。必须保证不存在超过2个相邻的柱子颜色相同,求有多少种染色方案。 注意事项n和k都是非负整数样例n = 3, k = 2, return 6 post 1, post 2, post 3way1 0 0 1 w
2017-11-07 11:59:36
217
原创 不同的路径 II
问题描述:"不同的路径" 的跟进问题:现在考虑网格中有障碍物,那样将会有多少条不同的路径?网格中的障碍和空位置分别用 1 和 0 来表示。 注意事项m 和 n 均不超过100样例如下所示在3x3的网格中有一个障碍物:[ [0,0,0], [0,1,0], [0,0,0]]一共有2条不同的路径从左上角到右下角
2017-11-07 11:52:49
179
原创 不同的路径
问题描述:有一个机器人的位于一个 m × n 个网格左上角。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。问有多少条不同的路径? 注意事项n和m均不超过100样例给出 m = 3 和 n = 3, 返回 6.给出 m = 4 和 n = 5, 返回 35.解题思路:主要是考虑联系,状态
2017-11-07 11:48:35
139
原创 最长上升连续子序列
问题描述:给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)样例给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回 4.给定 [5, 1, 2, 3, 4], 其最长上升连续子序列(LICS)为 [1
2017-10-29 22:38:04
329
原创 Split String
问题描述:Give a string, you can choose to split the string after one character or two adjacent characters, and make the string to be composed of only one character or two characters. Output all possib
2017-10-12 16:44:09
188
原创 最小子数组
题目描述:给定一个整数数组,找到一个具有最小和的子数组。返回其最小和。 注意事项子数组最少包含一个数字样例给出数组[1, -1, -2, 1],返回 -3解题思路:与最大子数组解题思路相同代码:class Solution {public: /* * @param nums: a list of integers
2017-09-21 17:05:20
241
原创 最大子数组
问题描述:给定一个整数数组,找到一个具有最大和的子数组,返回其最大和。注意事项子数组最少包含一个数样例给出数组[−2,2,−3,4,−1,2,1,−5,3],符合要求的子数组为[4,−1,2,1],其最大和为6解题思路:这里的数组依旧是连续取的,这样就定义两个变量,一个用于存最大值,另一个则根据数组变化存最大值。代码:clas
2017-09-21 16:57:59
287
原创 主元素
问题描述:给定一个整型数组,找出主元素,它在数组中的出现次数严格大于数组元素个数的二分之一。注意事项You may assume that the array is non-empty and the majority number always exist in the array.样例给出数组[1,1,1,1,2,2,2],返回 1解题思路:
2017-09-14 17:00:17
168
原创 落单的数
问题描述:给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例给出 [1,2,2,1,3,4,3],返回 4解题思路:对给定集合内元素先进行排序,相邻两个数为一组,进行比较,若不同,则找到该数。代码:class Solution {public: /* * @param A: An inte
2017-09-14 16:52:55
272
原创 平面列表
问题描述:给定一个列表,该列表中的每个要素要么是个列表,要么是整数。将其变成一个只包含整数的简单列表。样例给定 [1,2,[1,2]],返回 [1,2,1,2]。给定 [4,[3,[2,[1]]]],返回 [4,3,2,1]。解题思路:代码:感想:
2017-09-04 22:22:52
278
原创 子数组之和
问题描述:给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置 注意事项There is at least one subarray that it's sum equals to zero.样例给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].解题思路:找到和为
2017-06-08 17:46:00
204
原创 合并区间
问题描述:给出若干闭合区间,合并所有重叠的部分。样例给出的区间列表 => 合并后的区间列表:[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10], [15, 18] [15, 18]
2017-06-05 21:18:59
207
原创 中位数
问题描述:给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。样例给出数组[4, 5, 1, 2, 3], 返回 3给出数组[7, 9, 4, 5],返回 5解题思路:先用sort()函数排序,然后找第n/2代码:class Solution {public:
2017-06-05 09:21:36
176
原创 两数组的交 II
问题描述:计算两个数组的交 注意事项每个元素出现次数得和在数组里一样答案可以以任意顺序给出样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回[2, 2].解题思路:利用先进行排序,再比较的方法,这样元素不会重复输出,注意遍历时通过比较大小确定哪个集合加一。代码:class Solution {publ
2017-06-05 09:01:54
267
原创 两数组的交
问题描述:返回两个数组的交 注意事项Each element in the result must be unique.The result can be in any order.样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].解题思路:用unique()函数去掉集合中的重复元素,注意它只去掉相邻元素中
2017-06-05 08:46:52
171
原创 两数之和
问题描述:给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].解题思路:对任意两数求和与
2017-06-04 13:22:37
206
原创 整数排序 II
题目描述:给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。样例给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。解题思路:快速排序是O(nlogn)的算法,vector中的sort()用的就是快速排序。代码:class Solution {publi
2017-06-04 13:14:04
194
原创 整数排序
题目描述:给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法。样例对于数组 [3, 2, 1, 4, 5], 排序后为:[1, 2, 3, 4, 5]。解题思路:对向量中的元素进行两两比较,出现较小的元素时交换,从而找到最小元素,依次进行下去,直到排完所有元素。代码:class Solution {pu
2017-06-04 13:06:12
247
原创 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-18 17:59:33
166
原创 在二叉查找树中插入节点
问题描述:给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。样例给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / \1 4 --> 1 4 / / \ 3 3
2017-05-18 17:30:58
192
原创 将二叉树拆成链表
问题描述:将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。 注意事项不要忘记将左儿子标记为 null,否则你可能会得到空间溢出或是时间溢出样例1 \ 1 2 / \ \ 2 5 => 3 / \ \
2017-04-21 18:03:58
179
原创 把排序数组转换为高度最小的二叉搜索树
问题描述:给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。样例给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 7解题思路:将排序的数组中间一个树作为根节点,左子树比根节点值小,右子树比根节点值大。代码:/** * Definition o
2017-04-21 17:34:56
217
原创 二叉树的路径和
问题描述:给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。解题思路:对每条路径进行加和,与给定的值比较,若相等,加到向量中。代码:/** * Definition of TreeNode: * class TreeNode { * public: * int val;
2017-04-21 17:16:43
229
原创 二叉树的所有路径
问题描述:给一棵二叉树,找出从根节点到叶子节点的所有路径。样例给出下面这棵二叉树: 1 / \2 3 \ 5所有根到叶子的路径为:[ "1->2->5", "1->3"]解题思路:若二叉树不为空,将节点添加到向量中,左右子树进行递归,通过函数调用然后输出。代码:/** * Definition o
2017-04-20 17:12:10
201
原创 子树
问题描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。 注意事项若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。样例下面的例子中 T2 是 T1 的子树:
2017-04-20 16:50:39
161
原创 二叉树的层次遍历
问题描述:给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)样例给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]解题思路:用队列先进先出的特点,将每层的节点入对,后依次出队,然后将出队节点的下一层保存
2017-04-18 22:39:28
193
原创 二叉树的后序遍历
问题描述:给出一棵二叉树,返回其节点值的后序遍历。样例给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [3,2,1]解题思路:用函数调用来写,写一个z后序遍历的函数,用递归的思想,在函数中调用。代码:/** * Definition of TreeNode: * class TreeNod
2017-04-13 22:05:21
152
原创 二叉树的中序遍历
问题描述:给出一棵二叉树,返回其中序遍历样例给出二叉树 {1,#,2,3}, 1 \ 2 / 3返回 [1,3,2].解题思路:在函数外重新定义一个中序遍历函数,在另一个函数中调用,在写中序遍历的函数时,运用递归的思想更简单。代码:/** * Definition of TreeNode: * clas
2017-04-13 22:02:33
157
原创 二叉树的最小深度
问题描述:给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为 2解题思路:分情况考虑,首先是空树的情况,然后
2017-04-13 21:58:50
183
原创 二叉树的前序遍历
问题描述:给出一棵二叉树,返回其节点值的前序遍历。样例给出一棵二叉树 {1,#,2,3}, 1 \ 2 / 3 返回 [1,2,3].解题思路:代码:/** * Definition of TreeNode: * class TreeNode { * public: * int val; *
2017-04-12 22:22:43
198
原创 平衡二叉树
问题描述:给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 样例给出二叉树 A={3,9,20,#,#,15,7}, B={3,#,20,15,7}A) 3 B) 3 / \ \ 9 20
2017-04-12 21:12:10
134
原创 二叉树的最大节点
问题描述:在二叉树中寻找值最大的节点并返回。样例给出如下一棵二叉树: 1 / \ -5 2 / \ / \0 3 -4 -5 返回值为 3 的节点。解决思路:创建一个新的节点,将其与根节点比较,然后对左、右子树递归调用,得到结果。代码:class Solution {public: /**
2017-04-12 19:10:54
514
原创 等价二叉树
问题描述:检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。样例 1 1 / \ / \ 2 2 and 2 2 / /4 4就是两棵等价的二叉树。 1
2017-04-10 21:29:34
256
原创 翻转二叉树
问题描述:翻转一棵二叉树样例 1 1 / \ / \2 3 => 3 2 / \ 4 4解题思路:运用递归方式,将二叉树的左、右子树交换代码:/** * Definition of TreeNode: * class TreeNode { * public: *
2017-04-07 21:44:02
169
原创 克隆二叉树
问题描述:深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。样例给定一个二叉树: 1 / \ 2 3 / \4 5返回其相同结构相同数值的克隆二叉树: 1 / \ 2 3 / \4 5解题思路:建立一个新的二叉树,经过递推分别复制其左、右子树,完
2017-04-07 20:27:32
209
原创 二叉树的最大深度
问题描述:给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.解题思路:运用递推的方法,分别得到左、右子树根的数目,再加上二叉树的根节点,经过比较,得到该树的最大深度代码:/**
2017-04-07 20:19:28
154
原创 翻转链表
问题描述:翻转一个链表样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null解题思路:新建一个链表,经过赋值进行交换。代码:/** * Definition of ListNode * * class ListNode { * public: * int val; * ListN
2017-03-31 19:58:48
139
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅