(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个点,点与点之间可能有连接,判断这里是否有环路。
答案:这个也可以并查集吧,公共祖先的祖先是其孩子 就可能环路吧