o(n)
和o(1)。
其實開始的時候我也是一頭霧水,在紙上畫畫之後發現,其實就是一道變形的插入排序。幸運的是這裡不需要比較大小,要比較大小的話時間複雜度是o(n2),只用判斷正負,那時間複雜度就只要o(n)了。
如:-3,1,2,-1
,-3,4
。其實就是把正數後面的第乙個負數(如
-1)插到第乙個正數
(1)的前面,負數之間的每個正數
(1,2)
後移一位,就這麼簡單。時間複雜度剛好為o(n),控制項複雜度為o(1)。
//o(n)演算法分開正負數
void
insertsort(
int*
a ,int
size)
if(a[i]
>0&&
plus
<0)
}if(minus
>=0&&
plus
>=0)
a[plus]
=tmp;
minus=-1
;}}}
和o(1)。
其實這兩道筆試題沒有什麼區別,要說有區別就是看你是否理解。
//測試**如下:演算法分開奇偶數
void
insertsort1(
int*
a ,int
size)
if(a[i]%2
==0&&plus
<0)
}if(minus
>=0&&
plus
>=0)
a[plus]
=tmp;
minus=-1
;}}}
//執行結構截圖:測試**
intmain() ;
intsize
=sizeof
(a)/
sizeof
(int
);cout
<<
"-----------------------演算法分開正負數-----------------------
"<<
endl;
for(
inti=0
;i<
size;i++)
cout
<<
endl;
insertsort(a,size);
for(
inti=0
;i<
size;i++)
cout
<<
endl;
cout
<<
endl;
cout
<<
"-----------------------演算法分開奇偶數-----------------------
"<<
endl;
intb=;
ints
=sizeof
(b)/
sizeof
(int
);for
(inti=
0;i<
s;i++
)cout
<<
endl;
insertsort1(b,s);
for(
inti=0
;i<
s;i++
)getchar();
return0;
}
部落格:
演算法 兩道百度筆試題
o n 和o 1 其實開始的時候我也是一頭霧水,在紙上畫畫之後發現,其實就是一道變形的插入排序。幸運的是這裡不需要比較大小,要比較大小的話時間複雜度是o n2 只用判斷正負,那時間複雜度就只要o n 了。如 3,1,2,1 3,4 其實就是把正數後面的第乙個負數 如 1 插到第乙個正數 1 的前面,...
演算法 兩道百度筆試題
o n 和o 1 其實開始的時候我也是一頭霧水,在紙上畫畫之後發現,其實就是一道變形的插入排序。幸運的是這裡不需要比較大小,要比較大小的話時間複雜度是o n2 只用判斷正負,那時間複雜度就只要o n 了。如 3,1,2,1,3,4。其實就是把正數後面的第乙個負數 如 1 插到第乙個正數 1 的前面,...
百度指令碼筆試題兩道
1 寫指令碼實現,可以用shell perl等。在目錄 tmp下找到100個以abc開頭的檔案,然後把這些檔案的第一行儲存到檔案new中。2 寫指令碼實現,可以用shell perl等。把檔案b中有的,但是檔案a中沒有的所有行,儲存為檔案c,並統計c的行數。解答思路 1 覺得用shell更好一些,如...