互聯網公司面試題之五

問題:存在兩組數組,和4個數字a,b,c,d,要求做如下操作,將第一個數組第a個數到第b個數,第二個數組的第c個數到第d數放到一個數組中,求出合併後數組的中間值,如果有兩個中間值,取下標較小的那個。

輸入要求:第一行一個整數t表示有t個測試數據,第二行兩個整數,表示兩個數組的長度,接下來兩行表示兩個數字的值。最後一行有四個整數a,b,c,d。數組的長度不會超過1000。

輸出要求:每行一個整數,對應合併數組的下標在中間的那個值。

性能要求:在時間複雜度O(n)內完成這個計算任務。

答:實現代碼如下:


#include <stdio.h>

int main()
{
int n,a,b,i,k,m,x;
int b1,b2,e1,e2;
int s[1000],t[1000],p[1000]={0};
for(;~scanf("%d",&n);){
scanf("%d%d",&a,&b);
for(i=0;i<a;++i) scanf("%d",&s[i]);
for(i=0;i<b;++i) scanf("%d",&t[i]);
scanf("%d%d%d%d",&b1,&e1,&b2,&e2);
for(k=b1-1,m=0;k<=e1-1;p[s[k++]]=1,++m);
for(k=b2-1;k<=e2-1;p[t[k++]]=1,++m);
for(k=0,x=0;x<=m/2;k++) if(p[k]==1) ++x;
printf("%d\n",--k);
}
}


運行結果:

[img]http://dl.iteye.com/upload/attachment/605122/55a4cc25-2cea-393a-9abe-46fa863f1985.jpg[/img]
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章