面試的常考題,關(guān)注算法復(fù)雜度和空間,
假如是下面的方法判斷是否有重復(fù)
int a[MAX] = {0};
unsigned int x;
for(int i=0;i <n;i++)
{
//讀入x
if(a[x]==1)
{
//x重復(fù)出現(xiàn)了
}
else
{
a[x]=1;
}
}
那么,MAX比較大時(shí)就不合適了
但是可以把“用int數(shù)組記錄是否重復(fù)”改為“用每一個(gè)bit記錄是否重復(fù)”,于是變成:
int a[MAX] = {0};
unsigned int x;
const int iBitCount = 32;
for(int i=0;i <n;i++)
{
//讀入x
if(a[x/iBitCount]& (1 < <(x%iBitCount))!=0)
{
//x重復(fù)出現(xiàn)了
}
else
{
a[x/iBitCount] ¦= (1 < <(x%iBitCount));
}
}
另有,原地排序等O(1),排序后除重等
posted on 2008-04-22 22:47
fullfocus 閱讀(850)
評(píng)論(2) 編輯 收藏 所屬分類:
算法