E-COM-NET
首页
在线工具
Layui镜像站
SUI文档
联系我们
推荐频道
Java
PHP
C++
C
C#
Python
Ruby
go语言
Scala
Servlet
Vue
MySQL
NoSQL
Redis
CSS
Oracle
SQL Server
DB2
HBase
Http
HTML5
Spring
Ajax
Jquery
JavaScript
Json
XML
NodeJs
mybatis
Hibernate
算法
设计模式
shell
数据结构
大数据
JS
消息中间件
正则表达式
Tomcat
SQL
Nginx
Shiro
Maven
Linux
Cracking
Leetcode#22 Generate Parentheses
原题地址 《
Cracking
the Code》一书中出现过这道题,那里面提到了多种解法,这里用最简单的枚举法。
·
2015-11-09 12:08
LeetCode
【c语言】练习:判断两个字符是否为旋转字符
在《
Cracking
the coding interview》一书,有一道判断两个字符串是否为旋转字符的题目。
·
2015-11-07 14:32
C语言
Cracking
the Code Interview 4.3 Array to Binary Tree
Given a sorted (increasing order) array, write an algorithm to create a binary tree with minimal height. 1.Divide the array equally into left part and right part, the mid value will be the root
·
2015-11-02 19:31
interview
找工作相关算法学习计划
国外找工作 leetcode careercup 网站的创始人编写了careercup
cracking
coding interview
·
2015-11-02 17:37
找工作
坚持,努力--记录acm破300
这段时间充分说明人的潜力是无穷的,这三个月我完成的任务清单可以列一下: 看完了<剑指offer>,并在九度oj上完成了所有收录的题目 参加了两次九度月赛,均是第10名 完成了<
cracking
·
2015-11-02 15:12
ACM
Cracking
Microservices practices
微服务最佳实践 英文原文:
Cracking
Microservices practices 在我还不知道什么叫微服务架构的时候我就使用过它。
·
2015-11-02 12:37
service
SGU 200.
Cracking
RSA(高斯消元)
时间限制:0.25s 空间限制:4M 题意: 给出了m(<100)个数,这m个数的质因子都是前t(<100)个质数构成的。 问有多少个这m个数的子集,使得他们的乘积是完全平方数。 Solution: 要使乘积为
·
2015-11-01 12:01
rack
《
Cracking
the Coding Interview》——第9章:递归和动态规划——题目2
2014-03-20 02:55 题目:从(0, 0)走到(x, y),其中x、y都是非负整数。每次只能向x或y轴的正方向走一格,那么总共有多少种走法。如果有些地方被障碍挡住不能走呢? 解法1:如果没有障碍的话,组合数学,排列组合公式C(x + y, x)。 代码: 1 // 9.2 How many ways are there to go from (0, 0) to (x, y)
·
2015-10-31 15:03
interview
《
Cracking
the Coding Interview》——第7章:数学和概率论——题目7
2014-03-20 02:29 题目:将质因数只有3, 5, 7的正整数从小到大排列,找出其中第K个。 解法:用三个iterator指向3, 5, 7,每次将对应位置的数分别乘以3, 5, 7,取三者中最小的数作为生成的下一个结果。可以一次性生成整个序列,因为这个序列一般不会很长,增长率是指数级的。 代码: 1 // 7.7 Find the kth number that has
·
2015-10-31 15:02
interview
《
Cracking
the Coding Interview》——第9章:递归和动态规划——题目1
2014-03-20 02:55 题目:小朋友跳台阶,每次跳1层或2层,那么跳N层总共有多少种跳法。 解法:斐波那契数列。 代码: 1 // 9.1 A child can run up the stair with n staircases. Every time he can hop up by 1, 2 or 3 steps. How many possible way to d
·
2015-10-31 15:02
interview
《
Cracking
the Coding Interview》——第7章:数学和概率论——题目6
2014-03-20 02:24 题目:给定二位平面上一堆点,找到一条直线,使其穿过的点数量最多。 解法:我的解法只能适用整点,对于实数坐标就得换效率更低的办法了。请参见LeetCode - Max Points on a Line - zhuli19901106 - 博客园。 代码: 1 // 7.6 Find the line that c
·
2015-10-31 15:01
interview
《
Cracking
the Coding Interview》——第7章:数学和概率论——题目5
2014-03-20 02:20 题目:给定二维平面上两个正方形,用一条直线将俩方块划分成面积相等的两部分。 解法:穿过对称中心的线会将面积等分,所以连接两个中心即可。如果两个中心恰好重合,那么任意穿过这个点的直线都满足条件。 代码: 1 // 7.5 Given two squares on two-dimensional plane, draw a line to cut them
·
2015-10-31 15:00
interview
《
Cracking
the Coding Interview》——第7章:数学和概率论——题目4
2014-03-20 02:16 题目:只用加法和赋值,实现减法、乘法、除法。 解法:我只实现了整数范围内的。减法就是加上相反数。乘法就是连着加上很多个。除法就是减到不能减为止,数数总共减了多少个。 代码: 1 // 7.4 Implement the -*/ function with only the + operator. 2 // You cannot use bit
·
2015-10-31 15:00
interview
《
Cracking
the Coding Interview》——第7章:数学和概率论——题目3
2014-03-20 02:05 题目:给定笛卡尔二维平面上两条直线,判断它们是否相交。 解法:相交、重合、平行。 代码: 1 // 7.3 Given two lines on the Cartesian, determine if they would intersect. 2 #include <cstdio> 3 using namespace std;
·
2015-10-31 15:59
interview
《
Cracking
the Coding Interview》——第7章:数学和概率论——题目2
2014-03-20 01:59 题目:有n只蚂蚁在正n边形的n个顶点,同时以同速率开始沿着边走。每只蚂蚁走的方向是随机的,那么这些蚂蚁至少有两只发生碰撞的概率是多少。 解法:只有所有蚂蚁都往一个方向走才不会碰撞,所以不碰的概率就是2/2^n,碰的概率就用1减去喽。 代码: 1 // 7.2 n ants are standing on the vertices of an n-edge
·
2015-10-31 15:58
interview
《
Cracking
the Coding Interview》——第7章:数学和概率论——题目1
2014-03-20 01:57 题目:玩篮球投篮,有两种玩法:要么1投1中,要么3投两中。你单次投篮中的概率是p,那么对于不同的p,哪种玩法胜率更高? 解法:第一种总是胜率更高,可以列不等式算算,结果发现是个恒不等式。 代码: 1 // 7.1 Suppose you're playing a basketball game, you have two choices: 2 //
·
2015-10-31 15:57
interview
《
Cracking
the Coding Interview》——第6章:智力题——题目6
2014-03-20 01:14 题目:有100栈灯,一开始都关着。如果你按照n从1~100的顺序,每次都掰一下n的倍数的开关(开->关,关->开),那么到最后有多少灯是亮的? 解法:这个题目要多想想再动手,因为想通了以后就基本不用动手了。对于编号为x的灯,每当i是x的约数时,在第i轮时第x号灯就被掰了一次。比如6的约数为{1,2,3,6},6号灯被掰了4次。那么,每个灯被掰的次数
·
2015-10-31 15:57
interview
《
Cracking
the Coding Interview》——第6章:智力题——题目5
2014-03-20 01:08 题目:扔鸡蛋问题。有一个鸡蛋,如果从N楼扔下去恰好会摔碎,低于N楼则不碎,可以继续扔。给你两个这样的鸡蛋,要求你一定得求出N,怎么扔才能减少最坏情况下的扔的次数? 解法:为了让worst case得到最优化,就需要让best case和worst case最接近。具体做法请参见书上题解,因为我一直在想着二分,实在是摸不着头脑。 代码: 1 // 6.5
·
2015-10-31 15:56
interview
《
Cracking
the Coding Interview》——第6章:智力题——题目4
2014-03-20 01:02 题目:无力描述的一道智力题,真是货真价实的智力题,让我充分怀疑自己智力的智力题。有兴趣的还是看书去吧。 解法:能把题目看懂,你就完成80%了,用反证法吧。 代码: 1 // 6.4 There is an island with a bunch of people living there. 2 // The strange thing is, a
·
2015-10-31 15:55
interview
《
Cracking
the Coding Interview》——第6章:智力题——题目3
2014-03-20 00:48 题目:有3升的瓶子和5升的瓶子,只允许倒满、倒到满为止、或是泼光三种操作,怎么搞出4升水呢? 解法:如果A和B是互质的两个正整数,且A<B,令X=B-A,则(X%B, 2X%B, 3X%B, ..., BX%B)正好就是0~n-1的一个排列。也就是说,两瓶子的容积如果互质,就可以配出0~B之间的任意容积。至于怎么配,请看代码。 代码: 1 //
·
2015-10-31 15:54
interview
《
Cracking
the Coding Interview》——第6章:智力题——题目2
2014-03-19 06:57 题目:对于8x8的棋盘,如果拿掉对角位置的两个小块儿,能否用1x2的多米诺牌拼成剩下的棋盘? 解法:不可能。且不说8x8,NxN都是不可能的。如果N是奇数,NxN-2是奇数,自然不可能用偶数的面积拼成。如果N为偶数,根据小学学过的染色问题,将1x2的骨牌染成1黑1白,那么最后拼成的棋盘肯定有31黑31白。问题是,摘掉的两个对角位置的颜色是一样的,所以得出矛盾,
·
2015-10-31 15:54
interview
《
Cracking
the Coding Interview》——第6章:智力题——题目1
2014-03-19 06:40 题目:有20瓶药,其中19瓶装的都是1.0克的药片,只有1瓶装了1.1克的药。给你一个能称出具体克数的电子秤,只允许你称一次,怎么找出那瓶不一样的? 解法:如果药片管够,从每个瓶子里取出数量各不相同的药片,根据质量的总和减去“期望的”质量总和,就知道哪瓶有问题了。 代码: 1 // 6.1 There are 20 bottles of pills,
·
2015-10-31 15:53
interview
《
Cracking
the Coding Interview》——第5章:位操作——题目8
2014-03-19 06:33 题目:用一个byte数组来模拟WxH的屏幕,每个二进制位表示一个像素。请设计一个画水平线的函数。 解法:一个点一个点地画就可以了。如果要优化的话,其实可以把中间整字节的部分一口气画了,只用1/8的力气。 代码: 1 // 5.8 Given a byte array, set a consecutive bit segment to '1'. 2
·
2015-10-31 15:52
interview
《
Cracking
the Coding Interview》——第5章:位操作——题目7
2014-03-19 06:27 题目:有一个数组里包含了0~n中除了某个整数m之外的所有整数,你要设法找出这个m。限制条件为每次你只能用O(1)的时间访问第i个元素的第j位二进制位。 解法:0~n的求和有公式可循,只要把所有数都加起来就能知道缺少的m是几了。书本提供了一种比较高效的解法,我仔细读了以后觉得书上给的优化算法实际上需要额外的空间来支持,coding难度偏高,临场的话我估计挺难写出
·
2015-10-31 15:52
interview
《
Cracking
the Coding Interview》——第5章:位操作——题目6
2014-03-19 06:24 题目:将一个整数的奇偶二进制位交换,(0, 1) (2, 3) ... 解法:使用掩码来进行快速交换,定义掩码为'0101...'和‘1010...’。 代码: 1 // 5.6 Swap odd and even bits in an integer. 2 #include <cstdio> 3 using namespace s
·
2015-10-31 15:51
interview
《
Cracking
the Coding Interview》——第5章:位操作——题目4
2014-03-19 06:15 题目:解释(n & (n - 1)) == 0是什么意思? 解法:n&n-1是去掉最低位‘1’的方法。根据运算符优先级,貌似用不着加那个括号,但位运算的优先级总是个模棱两可的东西,所以一般还是要加上的。去掉一个‘1’就成了0,也就是说n是2的整次幂。 代码: 1 // 5.4 Show what the code "n &am
·
2015-10-31 15:50
interview
《
Cracking
the Coding Interview》——第5章:位操作——题目5
2014-03-19 06:22 题目:将整数A变成整数B,每次只能变一个二进制位,要变多少次呢。 解法:异或,然后求‘1’的个数。 代码: 1 // 5.5 Determine the number of bits required to convert integer A to B. 2 #include <cstdio> 3 using namespace s
·
2015-10-31 15:50
interview
《
Cracking
the Coding Interview》——第5章:位操作——题目3
2014-03-19 05:57 题目:给定一个整数N,求出比N大,而且二进制表示中和N有相同个数的‘1’的最小的数,比如3是‘11’,接下来的5是‘101’,再接下来的6是‘110’。 解法:从低位往高位,首先跳过连续的‘0’,然后跳过连续的‘1’,并数数有多少个1。如果这时还没到最高位,那就从刚才跳过的‘1’中拿出1个放到这位上(当前位是‘0’),然后把剩下的‘1’填到最低的几位上去。中间
·
2015-10-31 15:49
interview
《
Cracking
the Coding Interview》——第5章:位操作——题目2
2014-03-19 05:47 题目:给定一个double型浮点数,输出其二进制表示,如果不能在32个字符内完成输出,则输出“ERROR”。 解法:如果你熟悉IEEE754标准,应该知道double和float型的二进制位里都是什么。double型最高位是符号位,随后11位是指数位,之后52位是尾数。你可以根据尾数和指数来判断要用多少二进制位才能精确表示这个浮点数。代码不怎么好写,这种题目应
·
2015-10-31 15:48
interview
《
Cracking
the Coding Interview》——第5章:位操作——题目1
2014-03-19 05:45 题目:给定两个数M和N,将N按照二进制位,覆盖到M的特定段位中去。 解法:位操作,请看代码。 代码: 1 // 5.1 Insert one number into the certain bit segment of another number. 2 #include <cstdio> 3 using namespace std
·
2015-10-31 15:47
interview
《
Cracking
the Coding Interview》——第4章:树和图——题目9
2014-03-19 05:07 题目:给定一棵二叉树T和一个值value,在T中找出所有加起来和等于value的路径。路径的起点和终点都可以是树的任意节点。 解法:我偷了个懒,直接把这棵树看成一个无向图,用DFS来进行暴力搜索解决问题。因为没有什么数据顺序或是范围的限制,所以搜索剪枝好像也不太容易。 代码: 1 // 4.9 Find all paths in a binary t
·
2015-10-31 15:47
interview
《
Cracking
the Coding Interview》——第4章:树和图——题目8
2014-03-19 05:04 题目:给定两棵二叉树T1和T2,判断T2是否是T1的子树。子树的定义是,以T1的某个节点(可以是T1的根)作为根节点,得到的这棵树和T2一模一样。 解法:首先可以根据节点个数省去一大部分不必要的搜索,然后再递归判断。代码还比较简单,请看下面。 代码: 1 // 4.8 Check if a tree is a subtree of another.
·
2015-10-31 15:46
interview
《
Cracking
the Coding Interview》——第4章:树和图——题目7
2014-03-19 04:48 题目:最近公共父节点问题。 解法1:Naive算法,先对其高度,然后一层一层往上直到找到结果。 代码: 1 // 4.7 Least Common Ancestor 2 // This solution is Naive Algorithm, may timeout on very large and skewed trees. 3 #i
·
2015-10-31 15:45
interview
《
Cracking
the Coding Interview》——第4章:树和图——题目5
2014-03-19 04:11 题目:设计算法检查一棵二叉树是否为二叉搜索树。 解法:既然是二叉搜索树,也就是说左子树所有节点都小于根,右子树所有节点都大于根。如果你真的全都检查的话,那就做了很多重复工作。只需要将左边最靠右,和右边最靠左的节点和根进行比较,然后依照这个规则递归求解即可。 代码: 1 // 4.5 Check if a binary tree is binary se
·
2015-10-31 15:44
interview
《
Cracking
the Coding Interview》——第4章:树和图——题目6
2014-03-19 04:16 题目:找出一棵二叉搜索树中的中序遍历后继节点,每个节点都有指针指向其父节点。 解法1:分两种情况:向下走时,先右后左;向上走时,先左后右。如果目标节点有右子树,就向右下走,否则往左上走。话说,如果没有父指针的话,还是一口气进行各中序遍历,求出所有结果比较有效率。 代码: 1 // 4.6 Find the inorder successor of a
·
2015-10-31 15:44
interview
《
Cracking
the Coding Interview》——第4章:树和图——题目4
2014-03-19 03:40 题目:给定一棵二叉树,把每一层的节点串成一个链表,最终返回一个链表数组。 解法:前序遍历,遍历的同时向各个链表里添加节点。水平遍历好像还不如前序遍历来得方便。 代码: 1 // 4.4 Level order traversal 2 #include <cstdio> 3 #include <vector>
·
2015-10-31 15:43
interview
《
Cracking
the Coding Interview》——第4章:树和图——题目3
2014-03-19 03:34 题目:给定一个排好序的数组,设计算法将其转换为一棵二叉搜索树,要求树的高度最小。 解法:递归生成平衡二叉树,使左右子树的节点数尽量相等,所以对半开最好了。其实也可以生成一棵完全二叉树,不过写法应该不是很方便。 代码: 1 // 4.3 Convert sorted unique array to height-balanced binary searc
·
2015-10-31 15:42
interview
《
Cracking
the Coding Interview》——第4章:树和图——题目2
2014-03-19 03:32 题目:给定一个有向图,判断其中两点是否联通。 解法:DFS搜索解决,如果是无向图的话,就可以用并查集高效解决问题了。 代码: 1 // 4.2 Write a program to check if there exists a path between two nodes in a directed graph. 2 #include <
·
2015-10-31 15:42
interview
《
Cracking
the Coding Interview》——第4章:树和图——题目1
2014-03-19 03:30 题目:判断一个二叉树是否为平衡二叉树,即左右子树高度相差不超过1。 解法:递归算高度并判断即可。 代码: 1 // 4.1 Implement an algorithm to check if a bianry tree is height-balanced. 2 #include <algorithm> 3 #include &l
·
2015-10-31 15:41
interview
《
Cracking
the Coding Interview》——第3章:栈和队列——题目7
2014-03-19 03:20 题目:实现一个包含阿猫阿狗的先入先出队列,我要猫就给我一只来的最早的猫,要狗就给我一只来的最早的狗,随便要就给我一只来的最早的宠物。建议用链表实现。 解法:单链表可以实现一个简单的队列,这种有不同种类数据的队列,可以用if语句选择,也可以用一个堆做时间上的优化。对于来的时间,我用一个64位整数表示时间戳,在地球被太阳吃掉以前,这个数字是不大可能上溢的,所以问题
·
2015-10-31 15:40
interview
《
Cracking
the Coding Interview》——第3章:栈和队列——题目4
2014-03-18 05:28 题目:你肯定听过汉诺威塔的故事:三个柱子和N个从小到大的盘子。既然每次你只能移动放在顶上的盘子,这不就是栈操作吗?所以,请用三个栈来模拟N级汉诺威塔的玩法。放心,N不会很大的。 解法:递归着玩儿吧,还挺容易写的。要是迭代,我估计够呛。 代码: 1 // 3.4 Implement Hanoi Tower with three stacks. 2
·
2015-10-31 15:39
interview
《
Cracking
the Coding Interview》——第3章:栈和队列——题目6
2014-03-19 03:01 题目:给定一个栈,设计一个算法,在只使用栈操作的情况下将其排序。你可以额外用一个栈。排序完成后,最大元素在栈顶。 解法:我在草稿纸上试了试{1,4,2,3}之类的小例子,大概两三分钟有了思路。既然比较性排序是基于比较和交换的,那么就在两个栈的栈顶进行比较,同时在栈顶进行交换,此处需要O(1)的空间来进行交换。具体实现请看代码,时间复杂度为O(n^2)。 代码
·
2015-10-31 15:39
interview
《
Cracking
the Coding Interview》——第3章:栈和队列——题目3
2014-03-18 05:17 题目:设计一个栈,这个栈实际上由一列子栈组成。每当一个子栈的大小达到n,就新产生下一个子栈。整个栈群对外看起来就像普通栈一样,支持取顶top()、压入push()、弹出pop()操作。另外再实现一个弹出特定子栈popAt()的操作。 解法:用stack构成的数组,可以实现快速的随机访问。用stack构成的链表实现,可以防止在中间的一些子栈进行pop操作造成的空
·
2015-10-31 15:38
interview
《
Cracking
the Coding Interview》——第3章:栈和队列——题目2
2014-03-18 05:08 题目:实现一个栈,除了能进行push和pop之外,还能在O(1)时间内返回栈中最小的元素。 解法:用另一个“最小栈”存放最小的元素,每当有不小于当前最小值的元素进栈时,就代表最小值更新了(就算与当前最小值相等,也代表个数变了)。这时,同时要将最小值进栈。这个最小栈的栈顶就是最小的元素。出栈时,遇到数据栈的栈顶元素与最小栈相等时,要同时将最小栈出栈;否则只弹出数
·
2015-10-31 15:37
interview
《
Cracking
the Coding Interview》——第3章:栈和队列——题目1
2014-03-18 03:19 题目:用一个数组实现3个栈。 解法: 首先我想过让三个栈动态决定长度。要么左右各一个向中间靠拢,要么三个穿插着,后来都觉得实现起来太复杂,而且思路总有各种功能缺陷,会导致额外的时间或空间复杂度。所以,还是三等分成固定大小吧。好写又好用。 代码: // 3.1 Use an array to implement three stacks. // t
·
2015-10-31 15:36
interview
《
Cracking
the Coding Interview》——第2章:链表——题目7
2014-03-18 02:57 题目:检查链表是否是回文的,即是否中心对称。 解法:我的做法是将链表从中间对半拆成两条,然后把后半条反转,再与前半条对比。对比完了再将后半条反转了拼回去。这样不涉及额外的空间,比反转整条链表然后比较要来的好。如果你反转了整条链表又不用额外空间,接下来跟谁比去呢? 代码: 1 // 2.7 To Check the given linked list
·
2015-10-31 15:35
interview
《
Cracking
the Coding Interview》——第2章:链表——题目5
2014-03-18 02:32 题目:给定两个由单链表表示的数字,返回它们的和。比如(9->9) + (1->2) = 0->2->1,99 + 21 = 120。 解法:逐位相加,注意处理进位、长度不等。 代码: 1 // 2.5 Given two numbers represented by two lists, write a function th
·
2015-10-31 15:34
interview
《
Cracking
the Coding Interview》——第2章:链表——题目6
2014-03-18 02:41 题目:给定一个带有环的单链表,找出环的入口节点。 解法1:用hash来检测重复节点肯定是容易想而且效率也高的好办法。 代码: 1 // 2.6 You have a circular Linked List: a->b->c->d->e->c. Find where the cycle starts. 2 #inclu
·
2015-10-31 15:34
interview
《
Cracking
the Coding Interview》——第2章:链表——题目4
2014-03-18 02:27 题目:将一个单链表按照一个值X分为两部分,小于X的部分放在大于等于X的部分之前。 解法:按照值和X的大小,分链表为两条链表,然后连起来成一条。 代码: 1 // 2.4 Write code to partition a linked list around a value x, such that all nodes less than x come
·
2015-10-31 15:33
interview
《
Cracking
the Coding Interview》——第2章:链表——题目3
2014-03-18 02:25 题目:给定一个单链表中间的节点,删掉那个节点。 解法:把后面节点的数据域拷到当前节点来,然后删除后面那个节点。当前节点不是尾巴,所以后面不为空。 代码: 1 // 2.2 Remove a node from middle of a linked list 2 #include <cstdio> 3 using namespace
·
2015-10-31 15:32
interview
上一页
1
2
3
4
5
6
7
8
下一页
按字母分类:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
其他