笔试
酒剑随马@
努力变强
展开
-
最长公共子括号序列
一个合法的括号匹配序列被定义为:1. 空串""是合法的括号序列2. 如果"X"和"Y"是合法的序列,那么"XY"也是一个合法的括号序列3. 如果"X"是一个合法的序列,那么"(X)"也是一个合法的括号序列4. 每个合法的括号序列都可以由上面的规则生成例如"", "()", "()()()", "(()())", "(((()))"都是合法的。从一个字符串S中移除零个或者多个原创 2017-09-22 19:02:39 · 705 阅读 · 0 评论 -
有序数组和无序数组
14.有序数组的查找时间复杂度时O(lgn),无序数组的时间复杂度是O(N),但是对于插入操作,有序数组的时间复杂度是O(n),因为他需要把比插入数大的都往后移,无序数组插入的时间复杂度为O(1).原创 2017-10-13 16:13:15 · 4849 阅读 · 0 评论 -
short s=1; s=s+1
short s=1; s=s+1; 自然是编译不通过的 提示损失精度 那么 short s=1; s+=1; 为什么能编译通过那? 还有一个问题 隐式类型转换可以从小到大自动转,即byte->short->int->long如果反过来会丢失精度,必须进行显示类型转换 而s+=1的意思与s = s+1不同,s=s+1这句先执行s+1然后把结果赋给s,由于1为int类型,所以s+...原创 2017-10-13 15:03:26 · 474 阅读 · 0 评论 -
N个节点的二叉树有多少种形态
先考虑只有一个节点的情形,设此时的形态有f(1)种,那么很明显f(1)=1如果有两个节点呢?我们很自然想到,应该在f(1)的基础上考虑递推关系。那么,如果固定一个节点后,有两种情况,一是左子树还剩一个节点,此刻类型数量为f(1),第二种情况是右子树生一个节点,此刻类型数量为f(1),固有f(2) = f(1) + f(1)如果有三个节点呢?我们需要考虑固定两个节点的情况么?当然不行原创 2017-10-13 14:36:15 · 4470 阅读 · 0 评论 -
重排数列
时间限制:1秒空间限制:100768K小易有一个长度为N的正整数数列A = {A[1], A[2], A[3]..., A[N]}。牛博士给小易出了一个难题:对数列A进行重新排列,使数列A满足所有的A[i] * A[i + 1](1 ≤ i ≤ N - 1)都是4的倍数。小易现在需要判断一个数列是否可以重排之后满足牛博士的要求。 输入描述:输入的第一行为数列原创 2017-09-22 16:17:35 · 667 阅读 · 0 评论 -
字符串碎片
时间限制:1秒空间限制:32768K一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的。例如,"aaabbaaac"是由下面碎片组成的:'aaa','bb','c'。牛牛现在给定一个字符串,请你帮助计算这个字符串的所有碎片的平均长度是多少。输入描述:输入包括一个字符串s,字符串s的长度length(1 ≤ length ≤ 50),s只含小写字母('a'原创 2017-09-22 14:52:48 · 522 阅读 · 0 评论 -
相反数
编程题] 相反数时间限制:1秒空间限制:32768K为了得到一个数的"相反数",我们将这个数的数字顺序颠倒,然后再加上原先的数得到"相反数"。例如,为了得到1325的"相反数",首先我们将该数的数字顺序颠倒,我们得到5231,之后再加上原先的数,我们得到5231+1325=6556.如果颠倒之后的数字有前缀零,前缀零将会被忽略。例如n = 100, 颠倒之后是1原创 2017-09-22 14:13:47 · 860 阅读 · 0 评论 -
魔法币
小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x+1个魔法币魔法机器2:如果投入x个魔法币,魔法机器会将其变为2x+2个魔法币小易采购魔法神器总共需要n个魔法币,所以小易只能通过两台魔法机器产生恰好n个魔法币,小易需原创 2017-09-22 14:00:12 · 534 阅读 · 0 评论 -
搜索提示或者说智能提示
搜索提示或者说智能提示,就是用户在输入框敲一个字符会弹出下拉列表提示候选词给用户,方便用户输入,提升用户体验。假设我们的提示只支持前缀提示,支持汉字、拼音和英文提示。待提示的所有记录以及存在一个文本文件中,每行包含两部分:词和出现频率;同时我们有一个汉字和拼音转换表。不要求关注关注前端页面如何展示,请你给出实现方案、思路和核心数据结构。搜索提示功能如下:字典树又称单词查找树,Tr...原创 2017-09-23 11:39:06 · 721 阅读 · 0 评论 -
有 n 个无序整数( n>10000), 则找出其中最大的 M 个数字( 5<M<10), 所需要的最小时间复杂度为:
第一种算法:直接对n个数进行堆排序,每次建立一个大根堆,只需完成排序的前m次。这种的方法时间复杂度是O(mlogn),每建立一次大根堆需要 logn 的时间,总共m次。第二种算法:最开始选取前m个数,用这m个数建立一个小根堆。接下来,对后面n-m个数进行遍历,用根结点与这n-m个数进行比较,当发现一个数比根结点大时,交换,然后重新建立一个小根堆。最终我们可以得到m个最大的数字。这种方法...原创 2017-09-23 11:02:14 · 3382 阅读 · 0 评论 -
Enumeration和iterator
14.(1)enumeration不能在遍历过程中删除集合的元素,iterator可以调用自己的remove()方法删除元素,但是如果使用其他方式改变被遍历的集合将会抛出异常。(2)iterator比enumeration安全,因为他不允许其他的线程改变被遍历的集合中的元素,所以更加的安全(3)Enumeration比iterator速度快,占用内存小原创 2017-10-13 16:32:05 · 227 阅读 · 0 评论