C++刪除大量重復數字並且按升序排序(自己寫setbit來實現,時間空間都十分優化)
#include
using namespace std;
template
class Bitset
{
public:
Bitset()
{
_Tidy();//調用_Tidy()函數會初始化所有位為0.
}
void Show()//顯示01位.
{
for(int _I=0;_I<_N;_I++)
{
cout<<(test(_I)?'1':'0');
}
}
bool test(int _P)//測試該位置是否為真(1).
{
int _I = _P/32;
return (A[_I]>>(_P%32))&0x1;
}
void _Tidy()
{
for(int _I=0;_I<_W;_I++)
{
A[_I] = 0;
}
}
void set(int _P)//將_p下標設置為1.
{
int _I = _P/32;
A[_I] |= (0x1<<(_P%32));
}
void printf()
{
for(int _I=0;_I<_N;_I++)
{
test(_I) && (cout<<_I<<" ");
}
}//打印排列結果.
private:
typedef long LONG;//以long的4個字節為一個單位數組.
enum{_Nw=(_N-1)/(sizeof(LONG)*8),
_W=_Nw+1};
int A[_W];
};
int main()
{
Bitset<600> a;
int b[]={1,1,1,1,2,2,3,3,34,2,423,42,34,23,1,1,3,213,123,21,3,3,4,32,543,5,46,3,45,35,23,42,3};
for(int i=0;i<33;i++)
{
a.set(b[i]);
}
a.printf();
}