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
-LintCode-
lintcode-
合并排序数组II-64
合并两个排序的整数数组A和B变成一个新的数组。样例给出A= [1,2,3,empty,empty] B= [4,5]合并之后A将变成[1,2,3,4,5]注意你可以假设A具有足够的空间(A数组的大小大于或等于m+n)去添加B中的元素。classSolution{ public: voidmergeSortedArray(intA[],intm,intB[],intn){
ljlstart
·
2015-09-14 19:00
lintcode-
二叉树的中序遍历(非递归)-67
给出一棵二叉树,返回其中序遍历您在真实的面试中是否遇到过这个题? Yes样例给出二叉树 {1,#,2,3},1 \ 2 / 3返回 [1,3,2]/** *DefinitionofTreeNode: *classTreeNode{ *public: *intval; *TreeNode*left,*right; *TreeNode(intval){ *this->val=val; *this->l
ljlstart
·
2015-09-14 19:00
lintcode-
二叉树的前序遍历(非递归)-66
给出一棵二叉树,返回其节点值的前序遍历。样例给出一棵二叉树 {1,#,2,3},1 \ 2 / 3 返回 [1,2,3]./** *DefinitionofTreeNode: *classTreeNode{ *public: *intval; *TreeNode*left,*right; *TreeNode(intval){ *this->val=val; *this->left=this->r
ljlstart
·
2015-09-14 19:00
lintcode-
更新二进制位-179
给出两个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挑战最少的操作次数是多少 classSolution{ public: intupdateBits(intn,intm,inti,intj){ fo
ljlstart
·
2015-09-14 11:00
lintcode-
找出无向图汇总的相连要素-431
请找出无向图中相连要素的个数。图中的每个节点包含其邻居的1个标签和1个列表。(一个无向图的相连节点(或节点)是一个子图,其中任意两个顶点通过路径相连,且不与超级图中的其它顶点相连。)样例给定图:A------BC \|| \|| \|| \|| DE 返回 {A,B,D},{C,E}。其中有2个相连的元素,即{A,B,D},{C,E}*DefinitionforUndirectedgraph. *
ljlstart
·
2015-09-14 09:00
lintcode-
单词接龙-120
给出两个单词(start和end)和一个字典,找到从start到end的最短转换序列比如:每次只能改变一个字母。变换过程中的中间单词必须在字典中出现。您在真实的面试中是否遇到过这个题?样例给出数据如下:start="hit"end="cog"dict=["hot","dot","dog","lot","log"]一个最短的变换序列是"hit"->"hot"->"dot"->"dog"->"cog"
ljlstart
·
2015-09-13 20:00
lintcode-
数字组合-135
给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:[7],[2,2,3]样例给出候选数组[2,3,6,7]和目标数字7返回 [[7],[2,2,3]]注意所有的数字(包括目标数字)均为正整数。元素组合(a1, a2,…, ak)必须是非降序(ie, a1 ≤ a2 ≤…≤ a
ljlstart
·
2015-09-13 13:00
lintcode-
乱序字符串-171
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。样例对于字符串数组["lint","intl","inlt","code"]返回["lint","inlt","intl"]注意所有的字符串都只包含小写字母解题思路:类似哈希表的思想,以每个字符串排序后的值为key,key相同则存入相同的表中。然后再
ljlstart
·
2015-09-13 11:00
lintcode-
打劫房屋
假设你是一个专业的窃贼,准备沿着一条街打劫房屋。每个房子都存放着特定金额的钱。你面临的唯一约束条件是:相邻的房子装着相互联系的防盗系统,且当相邻的两个房子同一天被打劫时,该系统会自动报警。给定一个非负整数列表,表示每个房子中存放的钱,算一算,如果今晚去打劫,你最多可以得到多少钱在不触动报警装置的情况下。样例给定[3,8,4],返回8.挑战O(n)时间复杂度且O(1)存储。解题思路:假设你来到一个房
ljlstart
·
2015-09-13 10:00
lintcode-
搜索旋转排序数组-62
假设有一个排序的按未知的旋转轴旋转的数组(比如,0124567可能成为4567012)。给定一个目标值进行搜索,如果在数组中找到目标值返回数组中的索引位置,否则返回-1。你可以假设数组中不存在重复的元素。样例给出[4,5,1,2,3]和target=1,返回 2给出[4,5,1,2,3]和target=0,返回-1解题思路:旋转数组实际上是两个递增数组的组成,且第一个数组中的任意一个值都大于第二个
ljlstart
·
2015-09-12 23:00
lintcode-
将整数A转换为B-181
如果要将整数A转换为B,需要改变多少个bit位?样例如把31转换为14,需要改变2个bit位。(31)10=(11111)2(14)10=(01110)2classSolution{ public: intbitSwapRequired(inta,intb){ inttmp=a^b;//异或运算,对应位的值相同异或为零,不同为一,两数有多少位不同tmp中就有多少个一 intret=0; whil
ljlstart
·
2015-09-12 23:00
lintcode-
数字组合II-153
给出一组候选数字(C)和目标数字(T),找出C中所有的组合,使组合中数字的和为T。C中每个数字在每个组合中只能使用一次。样例给出一个例子,候选数字集合为[10,1,6,7,2,1,5] 和目标数字8 ,解集为:[[1,7],[1,2,5],[2,6],[1,1,6]]注意所有的数字(包括目标数字)均为正整数。元素组合(a1, a2,…, ak)必须是非降序(ie, a1 ≤ a2 ≤…≤ ak)。
ljlstart
·
2015-09-12 22:00
lintcode-
不同的路径II-115
跟进“不同的路径”:现在考虑网格中有障碍物,那样将会有多少条不同的路径?网格中的障碍和空位置分别用1和0来表示。样例如下所示在3x3的网格中有一个障碍物:[ [0,0,0], [0,1,0], [0,0,0]]一共有2条不同的路径从左上角到右下角。注意m和n均不超过100特别提示:此题不同于走迷宫,来到一点只能选择向下或向右走或退回,用递归直接超时,所以选择动态规划classSolution{ p
ljlstart
·
2015-09-12 17:00
lintcode-
单词搜索-123
给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。样例给出board=[ "ABCE", "SFCS", "ADEE"]word="ABCCED",->返回true,word="SEE",->返回true,word="ABCB",->返回false说明:虽然这个方法通过了
ljlstart
·
2015-09-12 16:00
lintcode-
子数组之和-138
给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置样例给出[-3,1,2,-3,4],返回[0,2]或者[1,3].第一种思路:利用两个for循环,每次取出一个元素依次与后面的元素相加,时间复杂度是O(n^2)。第二种思路:利用一个map记录从第一个元素开始到当前元素之和以及当前元素的下标,如果后面的连续元素之和为零那么sum不变,此时就找到了和为零的连续序
ljlstart
·
2015-09-12 14:00
lintcode-
交错正负数-144
给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。样例给出数组[-1,-2,-3,4,5,6],重新排序之后,变成[-1,5,-2,4,-3,6]或者其他任何满足要求的答案注意不需要保持正整数或者负整数原来的顺序。挑战原地完成,没有额外的空间classSolution{ public: voidrerange(vector&vec){ inti=0,j=1; intcount=
ljlstart
·
2015-09-12 11:00
lintcode-
哈稀函数-128
在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如:hashcode("abcd")=(ascii(a)*333 + ascii(b)*332 + ascii(c)*33+ ascii(d))% HASH_SIZE
ljlstart
·
2015-09-12 10:00
lintcode-
最长连续子序列
给定一个未排序的整数数组,找出最长连续序列的长度。样例给出数组[100,4,200,1,3,2],这个最长的连续序列是 [1,2,3,4],返回所求长度4给出数组[4,4,1,3,2,2],这个最长的连续序列是 [1,2,3,4],返回所求长度4说明要求你的算法复杂度为O(n)注意:set不能插入相同元素(set的底层实现是红黑树),set的插入是平均logm,遍历过程是n,所以O(nlogm),
ljlstart
·
2015-09-11 19:00
lintcode-
排颜色II-143
给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序。样例给出colors=[3,2,2,1,4],k=4,你的代码应该在原地操作使得数组变成[1,2,2,3,4]注意不能使用代码库中的排序函数来解决这个问题挑战一个相当直接的解决方案是使用计数排序扫描2遍的算法。这样你会花费O(k)的额外空间。你否能在不使用
ljlstart
·
2015-09-11 17:00
lintcode-
组合-152
组给出两个整数n和k,返回从1......n中选出的k个数的组合。样例例如n=4且k=2返回的解为:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]解题思路:元素放于不放入数组的思想classSolution{ public: voidbacktracing(vector>&ret,vector&tmp,intcur,intn,intk){ if(tmp.size()
ljlstart
·
2015-09-11 16:00
lintcode-
颜色分类-148
给定一个包含红,白,蓝且长度为n的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。我们可以使用整数0,1和2分别代表红,白,蓝。样例注意不能使用代码库中的排序函数来解决这个问题说明一个相当直接的解决方案是使用计数排序扫描2遍的算法。首先,迭代数组计算0,1,2出现的次数,然后依次用0,1,2出现的次数去覆盖数组。你否能想出一个仅使用常数级额外空间复杂度且只扫描遍历一遍
ljlstart
·
2015-09-11 16:00
lintcode-
寻找旋转排序数组中的最小值-159
假设一个旋转排序的数组其起始位置是未知的(比如0124567可能变成是4567012)。你需要找到其中最小的元素。你可以假设数组中不存在重复的元素。样例给出[4,5,6,7,0,1,2] 返回0旋转数组定义:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转 classSolution{ public: intfindMin(vector&num){ intleft=0; int
ljlstart
·
2015-09-11 16:00
lintcode-
加一-407
给定一个非负数,表示一个数字数组,在该数的基础上+1,返回一个新的数组。该数字按照大小进行排列,最大的数在列表的最前面。样例给定[1,2,3]表示123,返回[1,2,4].给定[9,9,9]表示999,返回[1,0,0,0]classSolution{ public: vectorplusOne(vector&digits){ if(digits.empty()) returndigits;
ljlstart
·
2015-09-11 15:00
lintcode-
最长上升子序列-76
给定一个整数序列,找到最长上升子序列(LIS),返回LIS的长度。样例给出[5,4,1,2,3],这个LIS是[1,2,3],返回3给出[4,2,4,5,3,7],这个LIS是[4,4,5,7],返回4挑战要求时间复杂度为O(n^2)或者O(nlogn)classSolution{ public: intlongestIncreasingSubsequence(vectornums){ intn
ljlstart
·
2015-09-10 21:00
lintcode-
最长公共子序列-77
给出两个字符串,找到最长公共子序列(LCS),返回LCS的长度。样例给出"ABCD"和"EDCA",这个LCS是"A"(或D或C),返回1给出"ABCD"和"EACB",这个LCS是"AC"返回2注意:序列可以不连续。classSolution{ public: intlongestCommonSubsequence(stringA,stringB){ if(A.empty()||B.empty
ljlstart
·
2015-09-10 21:00
lintcode-
中位数-80
给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。样例给出数组[4,5,1,2,3],返回3给出数组[7,9,4,5],返回5挑战时间复杂度为O(n)空间换时间:classSolution{ public: intmedian(vector&nums){ mapvis; intcount; intminp=nums[0];
ljlstart
·
2015-09-10 20:00
lintcode-
最小子串覆盖-32
给定一个字符串source和一个目标字符串target,在字符串source中找到包括所有目标字符串字母的子串。样例给出source="ADOBECODEBANC",target="ABC" 满足要求的解 "BANC"注意如果在source中没有这样的子串,返回"",如果有多个这样的子串,返回起始位置最小的子串。挑战要求时间复杂度为O(n)classSolution{ public: boolc
ljlstart
·
2015-09-10 19:00
lintcode-
二叉树的最小深度-155
给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。样例给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5 这个二叉树的最小深度为2/** *DefinitionofTreeNode: *classTreeNode{ *public: *intval; *TreeNode*left,*right; *TreeNode(int
ljlstart
·
2015-09-10 15:00
lintcode-
删除元素-172
给定一个数组和一个值,在原地删除与值相同的数字,返回新数组的长度。元素的顺序可以改变,并且对新的数组不会有影响。样例给出一个数组[0,4,4,0,0,2,4,4],和值4返回4并且4个元素的新数组为[0,0,0,2]classSolution{ public: intremoveElement(vector&A,intelem){ intfast=0,slow=0; intn=A.size();
ljlstart
·
2015-09-10 15:00
lintcode-
删除链表中倒数第n个节点-174
给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。样例给出链表1->2->3->4->5->null和n=2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.注意链表中的节点个数大于等于n挑战O(n)时间复杂度/** *DefinitionofListNode *classListNode{ *public: *intval; *ListNode*next; *Li
ljlstart
·
2015-09-10 14:00
lintcode-
删除数字-182
给出一个字符串A,表示一个n位正整数,删除其中k位数字,使得剩余的数字仍然按照原来的顺序排列产生一个新的正整数。找到删除k个数字之后的最小正整数。N<=240,k<=N样例给出一个字符串代表的正整数A和一个整数k,其中A=178542,k=4返回一个字符串"12"classSolution{ public: stringDeleteDigits(stringA,intk){ stringret;
ljlstart
·
2015-09-10 14:00
lintcode-
把排序数组转换为高度最小的二叉搜索树-177
给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。样例给出数组[1,2,3,4,5,6,7],返回4/\26/\/\1357/** *DefinitionofTreeNode: *classTreeNode{ *public: *intval; *TreeNode*left,*right; *TreeNode(intval){ *this->val=val; *this->left=
ljlstart
·
2015-09-10 12:00
lintcode-
最大数-184
给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数样例给出样例 [1,20,23,4,8],返回组合最大的整数为8423201注意最后的结果可能很大,所以我们返回一个字符串来代替这个整数C++耗时:25msstringitoa(inta){ if(a==0) return"0"; stringret; while(a){ ret+=a%10+'0'; a/=10; } reverse(r
ljlstart
·
2015-09-10 11:00
lintcode-
第k个排列-388
给定n和k,求123..n组成的排列中的第k个排列。样例对于n=3,所有的排列如下:123132213231312321如果k=4,第4个排列为,231.注意1≤n≤9classSolution{ public: boolnextPermutation(vector&vec){ intn=vec.size(); for(inti=n-1;i>=0;--i) for(intj=n-1;j>i;--
ljlstart
·
2015-09-09 22:00
lintcode-
不同的路径-114
有一个机器人的位于一个M×N个网格左上角(下图中标记为'Start')。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角(下图中标记为'Finish')。问有多少条不同的路径?样例1,11,21,31,41,51,61,72,13,13,7以上3x7的网格中,有多少条不同的路径?注意n和m均不超过100classSolution{ public: intuniquePaths(
ljlstart
·
2015-09-09 22:00
lintcode-
最小路径和-110
给定一个只含非负整数的m*n网格,找到一条从左上角到右下角的可以使数字和最小的路径。注意你在同一时间只能向下或者向右移动一步动态规划:classSolution{ public: intminPathSum(vector>&grid){ intn=grid.size(); intm=grid[0].size(); intsum=grid[0][0]; intdp[n][m]; memset(dp
ljlstart
·
2015-09-09 21:00
lintcode-
数字三角形-109
给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。样例比如,给出下列数字三角形:[ [2], [3,4], [6,5,7], [4,1,8,3]]从顶到底部的最小路径和为11(2+3+5+1=11)classSolution{ public: vector>dp; intsolve(vector>&v,inti,intj,intn){ if(dp[i
ljlstart
·
2015-09-09 21:00
lintcode-
图中两个点之间的路线-176
给出一张有向图,设计一个算法判断两个点s与t之间是否存在路线。如下图A----->B----->C\|\|\|\v->D----->Efors=Bandt=E,returntruefors=Dandt=C,returnfalse第一种解法DFS/** *DefinitionforDirectedgraph. *structDirectedGraphNode{ *intlabel; *vectorn
ljlstart
·
2015-09-09 20:00
lintcode-
验证查找二叉树-95
给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。节点的右子树中的值要严格大于该节点的值。左右子树也必须是二叉查找树。样例一个例子:1 /\ 23 / 4 \ 5 上述这棵二叉树序列化为"{1,2,3,#,#,4,#,#,5}".解题思路:如果是查找二叉树,中序遍历必然有序。/** *DefinitionofTreeNode: *cla
ljlstart
·
2015-09-09 19:00
lintcode-
二叉树中的最大路径和-94
给出一棵二叉树,寻找一条路径使其路径和最大,路径可以在任一节点中开始和结束(路径和为两个节点之间所在路径上的节点权值之和)样例给出一棵二叉树:1 /\ 23 返回6/** *DefinitionofTreeNode: *classTreeNode{ *public: *intval; *TreeNode*left,*right; *TreeNode(intval){ *this->val=val;
ljlstart
·
2015-09-09 13:00
lintcode-
平衡二叉树 -93
给定一个二叉树,确定它是高度平衡的。对于这个问题,一棵高度平衡的二叉树的定义是:一棵二叉树中每个节点的两个子树的深度相差不会超过1。 样例给出二叉树A={3,9,20,#,#,15,7},B={3,#,20,15,7}A)3B)3 /\\ 92020 /\/\ 157157二叉树A是高度平衡的二叉树,但是B不是/** *DefinitionofTreeNode: *classTreeNode{ *
ljlstart
·
2015-09-09 13:00
lintcode-
搜索区间-61
给定一个包含n个整数的排序数组,找出给定目标值target的起始和结束位置。如果目标值不在数组中,则返回[-1,-1]样例给出[5,7,7,8,8,10]和目标值target=8,返回[3,4]classSolution{ public: intLowerBound(vector&A,inttarget){ inty=A.size(); intx=0; while(xA[mid]) x=mid
ljlstart
·
2015-09-08 23:00
lintcode-
上一个排列
给定一个整数数组来表示排列,找出其上一个排列。样例给出排列[1,3,2,3],其上一个排列是[1,2,3,3]给出排列[1,2,3,4],其上一个排列是[4,3,2,1]注意排列中可能包含重复的整数classSolution{ public: vectorpreviousPermuation(vector&nums){ intn=nums.size(); for(inti=n-1;i>=0;i
ljlstart
·
2015-09-08 22:00
lintcode-
下一个排列
给定一个若干整数的排列,给出按正数大小进行字典序从小到大排序后的下一个排列。如果没有下一个排列,则输出字典序最小的序列。样例左边是原始排列,右边是对应的下一个排列。1,2,3→1,3,23,2,1→1,2,31,1,5→1,5,1classSolution{ public: boolnextPermutation(vector&nums){ intn=nums.size(); for(inti=
ljlstart
·
2015-09-08 21:00
lintcode-
带重复元素的排列 -16
给出一个具有重复数字的列表,找出列表所有不同的排列样例给出列表[1,2,2],不同的排列有:[ [1,2,2], [2,1,2], [2,2,1]]classSolution{ public: boolnextPermutation(vector&nums){ intn=nums.size(); for(inti=n-1;i>=0;i--){ for(intj=n-1;j>i;j--){
ljlstart
·
2015-09-08 21:00
lintcode-
子集17
给定一个含不同整数的集合,返回其所有的子集样例如果 S = [1,2,3],有如下的解:[ [3], [1], [2], [1,2,3], [1,3], [2,3], [1,2], [] ]注意子集中的元素排列必须是非降序的,解集必须不包含重复的子集classSolution{ public: /** *@paramS:Asetofnumbers. *@return:Alistoflists.Al
ljlstart
·
2015-09-08 20:00
lintcode-
第k大元素-197(堆的实现)
在数组中找到第k大的元素您在真实的面试中是否遇到过这个题? Yes样例给出数组[9,3,2,4,8],第三大的元素是4给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推classSolution{ public: voidinsert(vector&heap,inte){ heap.push_back(e); intsize=heap.size();
ljlstart
·
2015-09-08 20:00
lintcode-
有多少个点在同一条直线上-186
给出二维平面上的n个点,求最多有多少点在同一条直线上。您在真实的面试中是否遇到过这个题?样例给出4个点:(1,2),(3,6),(0,0),(1,3)。一条直线上的点最多有3个/** *Definitionforapoint. *structPoint{ *intx; *inty; *Point():x(0),y(0){} *Point(inta,intb):x(a),y(b){} *}; */
ljlstart
·
2015-09-08 12:00
lintcode-
比较字符串-55
比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是大写字母您在真实的面试中是否遇到过这个题?样例给出A="ABCD"B="ACD",返回true给出A="ABCD"B="AABC",返回false注意在A中出现的B字符串里的字符不需要连续或者有序classSolution{ public: boolcompareStrings(stringA,stringB){ //
ljlstart
·
2015-09-08 00:00
lintcode-
插入区间
给出一个无重叠的按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你要确保列表中的区间仍然有序且不重叠(如果有必要的话,可以合并区间)。您在真实的面试中是否遇到过这个题?样例插入区间[2,5]到[[1,2],[5,9]],我们得到[[1,9]]。插入区间[3,4]到[[1,2],[5,9]],我们得到[[1,2],[3,4],[5,9]]。/** *DefinitionofInterval
ljlstart
·
2015-09-08 00:00
上一页
1
2
3
4
5
6
7
下一页
按字母分类:
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
其他