- 博客(28)
- 资源 (16)
- 收藏
- 关注
原创 线段树查询 II
对于一个数组,我们可以对其建立一棵 线段树, 每个结点存储一个额外的值 count 来代表这个结点所指代的数组区间内的元素个数. (数组中并不一定每个位置上都有元素)实现一个 query 的方法,该方法接受三个参数 root, start 和 end, 分别代表线段树的根节点和需要查询的区间,找到数组中在区间[start, end]内的元素个数。样例对于数组 [0, 空,2
2015-10-29 00:57:31 529
原创 线段树的查询
对于一个有n个数的整数数组,在对应的线段树中, 根节点所代表的区间为0-n-1, 每个节点有一个额外的属性max,值为该节点所代表的数组区间start到end内的最大值。为SegmentTree设计一个 query 的方法,接受3个参数root, start和end,线段树root所代表的数组中子区间[start, end]内的最大值。样例对于数组 [1, 4, 2,
2015-10-28 23:40:07 416
原创 线段树的构造
线段树是一棵二叉树,他的每个节点包含了两个额外的属性start和end用于表示该节点所代表的区间。start和end都是整数,并按照如下的方式赋值:根节点的 start 和 end 由 build 方法所给出。对于节点 A 的左儿子,有 start=A.left, end=(A.left + A.right) / 2。对于节点 A 的右儿子,有 start=(A.left + A.righ
2015-10-28 23:09:31 379
原创 将表达式转换为波兰表达式
给定一个表达式字符串数组,返回该表达式的波兰表达式。(即去掉括号)样例对于 [(5 − 6) * 7] 的表达式(该表达式可表示为["(", "5", "−", "6", ")", "*", "7"]),其对应的波兰表达式为 [* - 5 6 7](其返回的数值为["*", "−", "5", "6", "7"])。class Solution {public:
2015-10-26 23:19:11 1208
原创 将表达式转换为逆波兰表达式
给定一个表达式字符串数组,返回该表达式的逆波兰表达式(即去掉括号)。样例对于 [3 - 4 + 5]的表达式(该表达式可表示为["3", "-", "4", "+", "5"]),返回 [3 4 - 5 +](该表达式可表示为 ["3", "4", "-", "5", "+"])。class Solution {public: /** * @para
2015-10-26 22:32:49 3374
原创 回文链表
设计一种方式检查一个链表是否为回文链表。样例1->2->1 就是一个回文链表。挑战O(n)的时间和O(1)的额外空间。/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode
2015-10-22 23:17:59 285
原创 Flatten Binary Tree to Linked List
latten a binary tree to a fake "linked list" in pre-order traversal.Here we use the right pointer in TreeNode as the next pointer in ListNode.样例 1 \ 1
2015-10-19 23:29:47 309
原创 Swap Nodes in Pairs
Given a linked list, swap every two adjacent nodes and return its head.Given 1->2->3->4, you should return the list as2->1->4->3.挑战Your algorithm should use only constant space.
2015-10-18 18:08:08 248
原创 Remove Linked List Elements
Remove all elements from a linked list of integers that have value val.样例Given 1->2->3->3->4->5->3, val = 3, you should return the list as 1->2->4->5/** * Definition for singly-linked lis
2015-10-18 17:30:01 390
原创 二叉查找树迭代器
设计实现一个带有下列属性的二叉查找树的迭代器:元素按照递增的顺序被访问(比如中序遍历)next()和hasNext()的询问操作要求均摊时间复杂度是O(1)样例对于下列二叉查找树,使用迭代器进行中序遍历的结果为 [1, 6, 10, 11, 12] 10 / \1 11 \ \ 6 12挑战
2015-10-17 21:39:09 534 1
原创 Reverse Nodes in k-Group
Given a linked list, reverse the nodes of a linked list k at a time and return its modified list.If the number of nodes is not a multiple of k then left-out nodes in the end should remain as it is
2015-10-16 23:58:34 325
原创 电话号码的字母组合
给一个数字字符串,每个数字代表一个字母,请返回其所有可能的字母组合。下图的手机按键图,就表示了每个数字可以代表的字母。 样例给定 "23"返回 ["ad", "ae", "af", "bd", "be", "bf", "cd", "ce", "cf"]注意以上的答案是按照词典编撰顺序进行输出的,不过,在做本题时,你也可以任意选择你喜欢的输出顺序。class So
2015-10-15 23:37:57 2324
原创 删除二叉查找树的节点
给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点。如果树中没有相同值的节点,就不做任何处理。你应该保证处理之后的树仍是二叉查找树。样例给出如下二叉查找树: 5 / \ 3 6 / \2 4删除节点3之后,你可以返回: 5 /
2015-10-15 22:15:08 433
原创 Post Office Problem
On one line there are n houses. Give you an array of integer means the the position of each house. Now you need to pick k position to build k post office, so that the sum distance of each house to the
2015-10-14 23:23:13 841 1
原创 k数和
给定n个不同的正整数,整数k(k 在这n个数里面找出K个数,使得这K个数的和等于目标数字,求问有多少种方案?样例给出[1,2,3,4],k=2, target=5,[1,4] and [2,3]是2个符合要求的方案class Solution {public: /** * @param A: an integer array. * @par
2015-10-12 22:39:35 690
原创 最大子数组差
给定一个整数数组,找出两个不重叠的子数组A和B,使两个子数组和的差的绝对值|SUM(A) - SUM(B)|最大。返回这个最大的差值。样例给出数组[1, 2, -3, 1],返回 6注意子数组最少包含一个数挑战 时间复杂度为O(n),空间复杂度为O(n)class Solution {public: /** * @
2015-10-09 23:03:02 485
原创 最长连续序列
给定一个未排序的整数数组,找出最长连续序列的长度。样例给出数组[100, 4, 200, 1, 3, 2],这个最长的连续序列是 [1, 2, 3, 4],返回所求长度 4说明 要求你的算法复杂度为O(n)class Solution {public: /** * @param nums: A list of integers *
2015-10-09 21:23:31 347
原创 最大子数组 II
给定一个整数数组,找出两个不重叠子数组使得它们的和最大。每个子数组的数字在数组中的位置应该是连续的。返回最大的和。样例给出数组[1, 3, -1, 2, -1, 2],这两个子数组分别为[1, 3]和[2, -1, 2]或者[1, 3, -1, 2]和[2],它们的最大和都是7注意子数组最少包含一个数挑战 要求时间复杂度为O(
2015-10-08 23:07:28 1350
原创 数飞机
给出飞机的起飞和降落时间的列表,用 interval 序列表示. 请计算出天上同时最多有多少架飞机?样例对于每架飞机的起降时间列表:[[1,10],[2,3],[5,8],[4,7]], 返回3。注意如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权。/** * @param intervals: An interval array
2015-10-06 23:54:21 815
原创 背包问题 II
给出n个物品的体积A[i]和其价值V[i],将他们装入一个大小为m的背包,最多能装入的总价值有多大?样例对于物品体积[2, 3, 5, 7]和对应的价值[1, 5, 2, 4], 假设背包大小为10的话,最大能够装入的价值为9。注意A[i], V[i], n, m均为整数。你不能将物品进行切分。你所挑选的物品总体积需要小于等于给定的m。class Solut...
2015-10-06 21:48:02 359
原创 背包问题1
在n个物品中挑选若干物品装入背包,最多能装多满?假设背包的大小为m,每个物品的大小为A[i]样例如果有4个物品[2, 3, 5, 7]如果背包的大小为11,可以选择[2, 3, 5]装入背包,最多可以装满10的空间。如果背包的大小为12,可以选择[2, 3, 7]装入背包,最多可以装满12的空间。函数需要返回最多能装满的空间大小。注意你不可以将物品进行切割...
2015-10-06 00:47:11 885
原创 更新二进制位
给出两个32位的整数N和M,以及两个二进制位的位置i和j。写一个方法来使得N中的第i到j位等于M(M会是N中从第i为开始到第j位的子串)样例给出N = (10000000000)2,M = (10101)2, i = 2, j = 6返回 N = (10001010100)2挑战最少的操作次数是多少?class Solution {
2015-10-04 23:02:18 851
原创 硬币排成线 III
有 n 个硬币排成一条线,每一枚硬币有不同的价值。两个参赛者轮流从任意一边取一枚硬币,知道没有硬币为止。计算拿到的硬币总价值,价值最高的获胜。请判定 第一个玩家 是输还是赢?样例给定数组 A = [3,2,2], 返回 true.给定数组 A = [1,2,4], 返回 true.给定数组 A = [1,20,4], 返回 false.class Solutio
2015-10-04 01:18:06 514
原创 攀爬字符串
给定一个字符串 S1,将其递归地分割成两个非空子字符串,从而将其表示为二叉树。下面是s1 = "great"的一个可能表达: great / \ gr eat / \ / \g r e at / \ a t在攀爬字符串的过程中,我们可以选择其中任意一个非叶节点,然后交换该节点的两个
2015-10-03 21:37:32 867
原创 重哈希
哈希表容量的大小在一开始是不确定的。如果哈希表存储的元素太多(如超过容量的十分之一),我们应该将哈希表容量扩大一倍,并将所有的哈希值重新安排。假设你有如下一哈希表:size=3, capacity=4[null, 21, 14, null] ↓ ↓ 9 null ↓ null哈希函数为:int hashcod
2015-10-03 14:29:39 915
原创 硬币排成线 II
有 n 个不同价值的硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。计算两个人分别拿到的硬币总价值,价值高的人获胜。请判定 第一个玩家 是输还是赢?样例给定数组 A = [1,2,2], 返回 true.给定数组 A = [1,2,4], 返回 false.class Solution {public: /**
2015-10-03 02:11:17 839
原创 硬币排成线
有 n 个硬币排成一条线。两个参赛者轮流从右边依次拿走 1 或 2 个硬币,直到没有硬币为止。拿到最后一枚硬币的人获胜。请判定 第一个玩家 是输还是赢?样例n = 1, 返回 true.n = 2, 返回 true.n = 3, 返回 false.n = 4, 返回 true.n = 5, 返回 true.挑战O(1) 时间复
2015-10-02 22:46:22 637
原创 搜索二维矩阵 II
写出一个高效的算法来搜索m×n矩阵中的值,返回这个值出现的次数。这个矩阵具有以下特性:每行中的整数从左到右是排序的。每一列的整数从上到下是排序的。在每一行或每一列中没有重复的整数。样例考虑下列矩阵:[ [1, 3, 5, 7], [2, 4, 7, 8], [3, 5, 9, 10]]给出target =
2015-10-02 00:03:57 525
exceptional c++ style中文版 pdf 刘未鹏译
2010-09-26
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人