您的位置:首页 > 职场人生

看大神文章小结——微软等面试 39,40

2013-05-17 10:42 127 查看
大神 地址 :http://blog.csdn.net/v_JULY_v/article/details/6015165

39.

网易有道笔试:

(1).

求一个二叉树中任意两个节点间的最大距离,

两个节点的距离的定义是 这两个节点间边的个数,

比如某个孩子节点和父节点间的距离是 1,和相邻兄弟节点间的距离是 2,优化时间空间复

杂度。

(2).

求一个有向连通图的割点,割点的定义是,如果除去此节点和与其相关的边,

有向图不再连通,描述算法。

第一题 貌似 前面做过了。

第二题 不会。。。和昨天一样 图 不大懂 先放一放

40.百度研发笔试题

引用自:zp155334877

1)设计一个栈结构,满足一下条件:min,push,pop 操作的时间复杂度为 O(1)。

2)一串首尾相连的珠子(m 个) ,有 N 种颜色(N<=10),

设计一个算法,取出其中一段,要求包含所有 N 中颜色,并使长度最短。

并分析时间复杂度与空间复杂度。

3)设计一个系统处理词语搭配问题,比如说 中国 和人民可以搭配,

则中国人民 人民中国都有效。要求:

*系统每秒的查询数量可能上千次;

*词语的数量级为 10W ;

*每个词至多可以与 1W 个词搭配

当用户输入中国人民的时候,要求返回与这个搭配词组相关的信息。

第一题 为什么 也这么眼熟。。push pop 铁定都是 O(1) 没问题 关键是min 其实 数据结构 加一个字段 记录这个对象入栈后 最小的min 就ok了。

二。我的思路是 选一个点 开始遍历 找到 从这个点出发 包含所有N中颜色的那一段。 然后 。 遍历下一个点 继续做。 复杂度有点高 思路很简单。空间 也只用了N个。

考虑一下 如何 优化 比如 先找到一个 1312345 这样的 (用 1,2,3,4,5 表示 5中颜色) 然后选下一个点 肯定需要 包含 312345 判断这个点 ok是否 就可以了。 不可 在加一个数 来判断。

如何判断 是否都包含 必须用 map了 n用来做key 找到几个了 用来做 value 这样 复杂度 应该就降到 O(n)了。

public void test(int []data,int n){
List list=new ArrayList<Integer>();
int begIndex=0,endIndex=-1;
int findCount=0;
int minLength=0;
//boolean isFind=false;
Map dataMap=new HashMap<Integer, Integer>();
for(int i=1;i<=n;i++){
dataMap.put(i, 0);
}
while(begIndex<data.length){
System.out.println(findCount);
if(findCount==n){
int d=data[begIndex];
int value = (Integer)dataMap.get(d);
if(value>1){
//isFind=true;
}else{
findCount--;
//isFind=false;
}
dataMap.put(d,value-1);
begIndex++;
}else{
endIndex++;
int d=data[endIndex%data.length];
int value = (Integer)dataMap.get(d);
//找到一个
if(value==0){
findCount++;
}
dataMap.put(d,value+1);
}

if(findCount==n){
int length=endIndex-begIndex+1;
//isFind=true;
if(minLength==0){
minLength=length;
}else{
minLength=Math.min(minLength, length);
}
System.out.println("beg:"+begIndex+"end:"+endIndex+"length:"+minLength);
}

}
System.out.println("最小的是:"+minLength);
}


ok 看了答案 一样的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: