热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

最近几个公司的笔试题

(1)RGB排序,一个字符串,里面只有三种字符RGB,所有的R都在G的前面,所有的G都在B的前面。将给定字符串按照此规律排序。要求不允许用辅助空间,复杂度控制在O(N)。遍历一遍就排好序。这道题有

(1)RGB排序,一个字符串,里面只有三种字符R G B,所有的R都在G的前面,所有的G都在B的前面。将给定字符串按照此规律排序。要求不允许用辅助空间,复杂度控制在O(N)。遍历一遍就排好序。

这道题有些不好搞,想着用快排达不到O(n)
思路只有遍历 ,然后利用已经得到的结果处理 还要思考啊~

想了一下,快排的话 取前k个最小值的话,从期望的角度考虑可以达到o(n)
因此我考虑从快排入手 ,只将比G小的放到G之前,将比G大的放在其后。
代码如下
#include "stdio.h"
#include "string.h"
#include
#include
using namespace std;
#define MAX 1024
int cmp(char c,char d)
{
int ret=0;

if(c=='B')
{
(d=='B')?ret=0:ret=1;
}
else if(c=='G')
{
d=='R'?ret=1:(d=='G')?ret=0:ret=-1 ;
}
else if(c=='R')
{
d=='R'?ret=0:ret=-1;
}
return ret;
}
int Partion(char *str,int s,int e)
{
int i=s-1;
int j;
for(j=s;j{
if(cmp(str[j],str[e])<0)
{
swap(str[i+1],str[j]);
i+=1;
}
}
swap(str[i+1],str[e]);
return i+1;
}
int quickSort(char *str,int s,int e)
{
int p=0;
if(s{
p = Partion(str,s,e);

}
return p;
}


int main()
{
char str[MAX];
int i=0;
int len =0;
int p;
scanf("%s",str);
len = strlen(str);
for(i=0;i{
if(str[i]=='G')
break;
}
swap(str[i],str[len-1]);
/*至于判断是否有G或者B这里省去了,直接考虑包含RGB的情况*/
p = quickSort(str,0,len-1);
for(i=p+1;i{
if(str[i]=='B')
break;
}
swap(str[i],str[len-1]);
p = quickSort(str,p+1,len-1);
cout<return 0;
}
不知道还有没有好的方法来解决这个问题!求指导!

(2)句子翻转

i am superman ---> superman am i

答案:这个简单 做了很多遍了,amazon笔试题里面写过,先每个单词转,后整个转


(1)判断两个Query是否相同北京欢迎你你欢迎北京

答案:搜索引擎会对其进行分词,一般为 北京/欢迎/你  你/欢迎/北京

           只有判断句子是否相同,这个不太清楚

(2)最长前缀子串问题

a="abdcdef"   b="dex"   则最长子串是de

 答案:这种情况下对a建立后缀数组,然后查找b的最长前缀匹配


(3)某数据库应用,大量的插入和查询,查询速度只有10/秒,请问:问题可能在哪里?

答案:应该是索引没有,或是索引建的不好

(4)中国到香港搭了一个10G的私有光线,单进程传输速度只有1,2M,请问:问题可能出在哪里?

答案:(待研究)应该是服务器 到客户端 这里的流量不够吧。

(5)有个Sequence,形如:S[]={a,b,...z,aa,ab,...az,ba,bb,...bz,...aaa,aab,...aaz,...}

给定一个字符串,查找在不在Sequence里,位置是多少?

答案:也就是一个26进制的处理吧,二分查找吧


(1)区间序列 (2,3) (4.2,6) (7,9)判断给定的一个区间与上面哪些区间有交集,比如给定(4,5)则输出(4.2,6)

答案:并查集解决吧,真的每个区间的点 建立祖先,然后判断是否祖先相同就行了


(2)两个有序数组,A[k]B[k]长度都为k。求前k个最小的(a[i]+b[j])

答案:去A[0]+B[0]作为第一个,然后A和B分别取后一个减前一个差值最小的那一边


1,strcmp函数实现。

2,判断大段小段模式。

3,有序链表的创建。


系统设计题:

大图导航系统:

(1)现有大图1W张,像素:1024*4096。系统可以增加或者删除图片。

(2)手机屏幕分辨率240*320.内存16M,手机本地存储256M。只能显示图片局部,用户左右移动来查看大图的其他部分。

(3)若干台PC机,内存4G,硬盘800G,双核CPU

问题:逻辑结构图,模块划分?模块间的关系,为何这么划分,原因是?

问题:如果大图数量增加,安装该应用的手机客户端增加,会带来哪些问题,怎么解决?

程序设计题:

一棵树,每个节点保存一个数字,找两个相同的节点(所谓相同的节点是指,两个节点的值相同,并且它们的子结构也要相同,就是以他俩为跟的那两颗子树也要一模一样。)

答案:递归吧

一个平面,上有n个点,点与点之间可能有连接,判断这里是否有环路。

答案:这个也可以并查集吧,公共祖先的祖先是其孩子 就可能环路吧






推荐阅读
author-avatar
再见傻瓜傻瓜_299
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有