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-
三角形计数
给定一个整数数组,在该数组中,寻找三个数,分别代表三角形三条边的长度,问,可以寻找到多少组这样的三个数来组成三角形?样例例如,给定数组S= {3,4,6,7},返回 3其中我们可以找到的三个三角形为:{3,4,6} {3,6,7} {4,6,7} 给定数组S= {4,4,4,4},返回 3其中我们可以找到的三个三角形为:{4(1),4(2),4(3)} {4(1),4(2),4(4)} {4(1)
wangyuquanliuli
·
2015-05-21 18:00
面试
lintcode
LintCode-
不同的子序列
给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响。(比如,“ACE”是“ABCDE”的子序列字符串,而“AEC”不是)。 样例给出S= "rabbbit",T= "rabbit"返回3分析:一般来说,如果题目里面给出两个字符串,基本是两种思路,一种就是递归判断,一种就是动态规划,这里我
wangyuquanliuli
·
2015-05-18 23:00
面试
lintcode
LintCode-
背包问题 II
给出n个物品的体积A[i]和其价值V[i],将他们装入一个大小为m的背包,最多能装入的总价值有多大?样例对于物品体积[2,3,5,7]和对应的价值[1,5,2,4],假设背包大小为10的话,最大能够装入的价值为9。注意A[i],V[i],n,m均为整数。你不能将物品进行切分。你所挑选的物品总体积需要小于等于给定的m。分析:最原始的01背包问题。代码:classSolution{ public: /
wangyuquanliuli
·
2015-05-18 21:00
面试
lintcode
LintCode-
堆化
给出一个整数数组,堆化操作就是把它变成一个最小堆数组。对于堆数组A,A[0]是堆的根,并对于每个A[i],A[i*2+1]是A[i]的左儿子并且A[i*2+2]是A[i]的右儿子。样例给出 [3,2,1,4,5],返回[1,2,3,4,5] 或者任何一个合法的堆数组挑战O(n)的时间复杂度完成堆化说明什么是堆?堆是一种数据结构,它通常有三种方法:push,pop和top。其中,“push”添加新的
wangyuquanliuli
·
2015-05-18 19:00
面试
lintcode
LintCode-
最接近零的子数组和
给定一个整数数组,找到一个和最接近于零的子数组。返回第一个和最有一个指数。你的代码应该返回满足要求的子数组的起始位置和结束位置样例给出[-3,1,1,-3,5],返回[0,2],[1,3], [1,1], [2,2] 或者[0,4]挑战O(nlogn)的时间复杂度分析:首先O(n^2)的算法很好想,直接枚举起点就行,看到挑战的复杂度,想肯定要排序或者二分什么的,这里没找出能二分的性质来,所以想只能
wangyuquanliuli
·
2015-05-18 12:00
面试
lintcode
LintCode-
快速幂
计算an %b,其中a,b和n都是32位的整数。样例例如231 %3=2例如1001000 %1000=0挑战O(logn)分析:既然复杂度有要求,那么肯定是类似二分啦。代码:classSolution{ public: /* *@parama,b,n:32bitintegers *@return:Aninteger */ intfastPower(inta,intb,intn){ //write
wangyuquanliuli
·
2015-05-18 11:00
面试
lintcode
LintCode-
交错正负数
给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。样例给出数组[-1,-2,-3,4,5,6],重新排序之后,变成[-1,5,-2,4,-3,6]或者其他任何满足要求的答案注意不需要保持正整数或者负整数原来的顺序。挑战原地完成,没有额外的空间分析:如果正数多那么第一个数应该是正数,反之也成立,确定每一位的符号,然后从后面选就行,复杂度为O(n^2),不清楚有没有更优的。代码:cla
wangyuquanliuli
·
2015-05-18 10:00
面试
lintcode
LintCode-
颜色分类
给定一个包含红,白,蓝且长度为n的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。我们可以使用整数0,1和2分别代表红,白,蓝。样例注意不能使用代码库中的排序函数来解决这个问题说明一个相当直接的解决方案是使用计数排序扫描2遍的算法。首先,迭代数组计算0,1,2出现的次数,然后依次用0,1,2出现的次数去覆盖数组。你否能想出一个仅使用常数级额外空间复杂度且只扫描遍历一遍
wangyuquanliuli
·
2015-05-18 10:00
面试
lintcode
LintCode-
组合
组给出两个整数n和k,返回从1......n中选出的k个数的组合。样例例如n=4且k=2返回的解为:[[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]分析:对每个元素,取或不取,递归回溯代码:classSolution{ public: /** *@paramn:Giventherangeofnumbers *@paramk:Giventhenumbersofcombina
wangyuquanliuli
·
2015-05-18 10:00
面试
lintcode
LintCode-
数字组合 II
给出一组候选数字(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)。解
wangyuquanliuli
·
2015-05-17 23:00
面试
lintcode
LintCode-
寻找旋转排序数组中的最小值
假设一个旋转排序的数组其起始位置是未知的(比如0124567 可能变成是4567012)。你需要找到其中最小的元素。你可以假设数组中不存在重复的元素。样例给出[4,5,6,7,0,1,2] 返回0分析:二分查找,因为没有重复的,于是很好判断最小点在哪。代码:classSolution{ public: /** *@paramnum:arotatedsortedarray *@return:them
wangyuquanliuli
·
2015-05-17 22:00
面试
lintcode
LintCode-
寻找旋转排序数组中的最小值 II
假设一个旋转排序的数组其起始位置是未知的(比如0124567 可能变成是4567012)。你需要找到其中最小的元素。数组中可能存在重复的元素。样例给出[4,4,5,6,7,0,1,2] 返回0分析:还是二分查找,但是因为有重复元素的存在,所以最坏情况下复杂度是O(n),当num[mid]>num[r]的时候,可以肯定,最小值肯定在[mid,r]之间,当num[mid]&num){ returnf
wangyuquanliuli
·
2015-05-17 22:00
面试
lintcode
LintCode-
旋转图像
给定一个N×N的二维矩阵表示图像,90度顺时针旋转图像。样例给出一个矩形[[1,2],[3,4]],90度顺时针旋转后,返回[[3,1],[4,2]]挑战能否在原地完成?分析:一种解法是原地模拟,一个点存到下一个点,一圈一圈的模拟,另外还有种简单的实现方法是通过两次折叠,先上下对换,再根据对角线对换,即可得到目标图像。代码:classSolution{ public: /** *@parammat
wangyuquanliuli
·
2015-05-17 21:00
面试
lintcode
LintCode-
矩阵归零
给定一个m×n矩阵,如果一个元素是0,则将其所在行和列全部元素变成0。需要在原地完成。样例给出一个矩阵[[1,2],[0,3]],返回[[0,2],[0,0]]挑战你是否使用了额外的空间?一个直接的解决方案是使用O(MN)的额外空间,但这并不是一个好的方案。一个简单的改进方案是使用O(M+N)的额外空间,但这仍然不是最好的解决方案。你能想出一个常数空间的解决方案吗?分析:若点(i,j)为0,则可以
wangyuquanliuli
·
2015-05-17 21:00
面试
lintcode
LintCode-
不同的二叉查找树
给出 n,问由1...n 为节点组成的不同的二叉查找树有多少种?样例给出n=3,有5种不同形态的二叉查找树:13321 \///\\ 321132 //\\ 2123 分析:只要记录下有x个不同的数的情况下有多少种解法,不适合用递归,在数据量较大的情况下,于是可以用记忆化搜索。我这里直接用一个数组保存结果了==代码:classSolution{ public: /** *@paramnn:Anin
wangyuquanliuli
·
2015-05-17 19:00
面试
lintcode
LintCode-
不同的二叉查找树 II
给出n,生成所有由1...n为节点组成的不同的二叉查找树样例给出n=3,生成所有5种不同形态的二叉查找树: 1 3 3 2 1 \ / / /\ \ 3 2 1 1 3 2 / / \ \ 2 1 2 3分析:以每个数字为head,然后递归产生就行。代码:/*
wangyuquanliuli
·
2015-05-17 19:00
面试
lintcode
LintCode-
旋转链表
给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数样例给出链表1->2->3->4->5->null和k=2返回4->5->1->2->3->null分析:链表的基本操作代码:/** *Definitionforsingly-linkedlist. *structListNode{ *intval; *ListNode*next; *ListNode(intx):val(x)
wangyuquanliuli
·
2015-05-17 18:00
面试
lintcode
LintCode-
乱序字符串
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。样例对于字符串数组 ["lint","intl","inlt","code"]返回 ["lint","inlt","intl"]注意所有的字符串都只包含小写字母分析:对每次字母进行排序,然后用hash表记录个数就行代码:classSolution{
wangyuquanliuli
·
2015-05-17 18:00
面试
lintcode
LintCode-
图中两个点之间的路线
给出一张有向图,设计一个算法判断两个点 s 与 t 之间是否存在路线。样例如下图:A----->B----->C \| \| \| \v ->D----->E for s=B and t=E,return truefor s=D and t=C,return false分析:直接BFS()即可代码:/** *DefinitionforDirectedgraph. *structDirectedGr
wangyuquanliuli
·
2015-05-17 18:00
面试
lintcode
LintCode-
更新二进制位
给出两个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挑战最少的操作次数是多少?分析:这道题粗粗一看蛮简单,但实际上坑很多,而且间接性的考了原码反码和补码(负数的二进制表示),我的做法是先都转换成二进制表
wangyuquanliuli
·
2015-05-17 17:00
面试
lintcode
LintCode-
木材加工
有一些原木,现在想把这些木头切割成一些长度相同的小段木头,需要得到的小段的数目至少为 k。当然,我们希望得到的小段越长越好,你需要计算能够得到的小段木头的最大长度。样例有3根木头[232,124,456], k=7,最大长度为114.注意木头长度的单位是厘米。原木的长度都是正整数,我们要求切割得到的小段木头的长度也要求是整数。无法切出要求至少 k 段的,则返回 0 即可。挑战O(nlogLen),
wangyuquanliuli
·
2015-05-17 14:00
面试
lintcode
LintCode-
最大数
给出一组非负整数,重新排列他们的顺序把他们组成一个最大的整数样例给出样例 [1,20,23,4,8],返回组合最大的整数为8423201注意最后的结果可能很大,所以我们返回一个字符串来代替这个整数分析:这个其实是一个排序问题,当然首字母越大肯定应该排在前面,注意【20,201】【20,203】两种情况,第一种201应该在20后面,第二种203应该在20前面。代码:boolcmp(strings1,
wangyuquanliuli
·
2015-05-16 20:00
面试
lintcode
LintCode-
乘积最大子序列
找出一个序列中乘积最大的连续子序列(至少包含一个数)。样例比如,序列 [2,3,-2,4] 中乘积最大的子序列为 [2,3] ,其乘积为6。分析:访问到每个点的时候,以该点为子序列的末尾的乘积,要么是该点本身,要么是该点乘以以前一点为末尾的序列,注意乘积负负得正,故需要记录前面的最大最小值。代码:classSolution{ public: /** *@paramnums:avectorofint
wangyuquanliuli
·
2015-05-15 21:00
面试
lintcode
LintCode-
丢失的第一个正整数
给出一个无序的正数数组,找出其中没有出现的最小正整数。样例如果给出 [1,2,0],return 3 如果给出 [3,4,-1,1],return 2挑战只允许时间复杂度O(n)的算法,并且只能使用常数级别的空间。分析:把当前数放到该放的位置即可,如1应该放到第0个位置,2应该放到第1个位置。代码:classSolution{ public: /** *@paramA:avectorofinteg
wangyuquanliuli
·
2015-05-15 20:00
面试
lintcode
LintCode-
接雨水
给出 n 个非负整数,代表一张X轴上每个区域宽度为 1 的海拔图,计算这个海拔图最多能接住多少(面积)雨水。样例如上图所示,海拔分别为 [0,1,0,2,1,0,1,3,2,1,2,1],返回 6.挑战O(n)时间,O(1)空间O(n)时间,O(n)空间也可以接受分析:只能遍历一遍,且不能存储所有的高度,一块直柱能接的水取决于左右两边较短的高度,所以一个比较直观的方法是从左到有遍历一遍记录该点左边
wangyuquanliuli
·
2015-05-15 12:00
面试
lintcode
LintCode-
第k个排列
给定 n 和 k,求123..n组成的排列中的第 k 个排列。样例对于 n=3,所有的排列如下:123 132 213 231 312 321 如果 k=4,第4个排列为,231.注意1≤n≤9分析:可以提前计算好不同的k个数有多少个排列,然后一位一位的确定,比如n=3,k=3的情况下,要确立第一位的时候,后面两个数可以产生2个不同的排列,那么第一位肯定应该是2,如果是1的话,k最多为2,如果是3
wangyuquanliuli
·
2015-05-14 22:00
面试
lintcode
LintCode-
统计比给定整数小的数的个数
给定一个整数数组(下标由0到n-1,其中n表示数组的规模,数值范围由0到10000),以及一个查询列表。对于每一个查询,将会给你一个整数,请你返回该数组中小于给定整数的元素的数量。样例对于数组 [1,2,7,8,5] ,查询 [1,8,5],返回 [0,4,2]注意在做此题前,最好先完成 线段树的构造 and 线段树查询II 这两道题目。挑战可否用一下三种方法完成以上题目。仅用循环方法分类搜索和二
wangyuquanliuli
·
2015-05-14 19:00
面试
lintcode
LintCode-
最多有k个不同字符的最长子字符串
给定一个字符串,找到最多有k个不同字符的最长子字符串。样例例如,给定s= "eceba" , k=3,T是 "eceb",长度为 4.挑战O(n),n是所给字符串的长度分析:采用双指针,用map记录双指针中间的字符串是否满足要求代码:classSolution{ public: /** *@params:Astring *@return:Thelengthofthelongestsubstring
wangyuquanliuli
·
2015-05-14 19:00
面试
lintcode
LintCode-
最小差
给定两个整数数组(第一个是数组 A,第二个是数组 B),在数组A中取A[i],数组B中取B[j],A[i]和B[j]两者的差越小越好(|A[i]-B[j]|)。返回最小差。样例给定数组A= [3,4,6,7],B= [2,3,8,9],返回 0。挑战时间复杂度O(n log n)分析:看到时间复杂度就想到遍历A数组然后对B数组进行二分查找,二分查找可以手写,也可以直接调用STL。代码:classS
wangyuquanliuli
·
2015-05-14 19:00
面试
lintcode
LintCode-
数飞机
给出飞机的起飞和降落时间的列表,用interval序列表示.请计算出天上同时最多有多少架飞机?样例对于每架飞机的起降时间列表:[[1,10],[2,3],[5,8],[4,7]],返回3。注意如果多架飞机降落和起飞在同一时刻,我们认为降落有优先权。分析:可以根据每个线段,利用一个map来标记,对于第一个[1,10],我们标记m[1]+=1,m[10]-=1,表示在1这个时刻多了一架飞机,而在10这
wangyuquanliuli
·
2015-05-14 19:00
面试
lintcode
LintCode-
最长无重复字符的子串
给定一个字符串,请找出其中无重复字符的最长子字符串。样例例如,在"abcabcbb"中,其无重复字符的最长子字符串是"abc",其长度为 3。对于,"bbbbb",其无重复字符的最长子字符串为"b",长度为1。挑战O(n)时间分析:遍历该字符串,每遍历一个字母时,利用map去找该字母最近一次出现是什么时候,中间这一段便是无重复字符的字符串。代码:classSolution{ public: /**
wangyuquanliuli
·
2015-05-14 19:00
面试
lintcode
LintCode-
装最多水的容器
给定 n 个非负整数a1,a2,...,an,每个数代表了坐标中的一个点 (i,ai)。画 n 条垂直线,使得 i 垂直线的两个端点分别为(i,ai)和(i,0)。找到两条线,使得其与 x 轴共同构成一个容器,以容纳最多水。样例给出[1,3,2],最大的储水面积是2.注意容器不可倾斜。分析:采用两边逼近法,显而易见,当逐渐逼近的时候,容器的长在变短,那么要使得面积增大的话,宽必须要变大,所以我们保
wangyuquanliuli
·
2015-05-14 19:00
面试
lintcode
上一页
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
其他