荣誉版主
- 积分
- -2403
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2010-5-4
- 最后登录
- 1970-1-1
|
brute force 需要的时间复杂度是O(n^3), 但是这题有它的特点
如果问题是排序一个只包含0,1的一维数组,那么只要O(n)就可以搞定, 这样就把原数组分裂成了两部分,再递归的分别对两部分排序.... 类似于快排的思想,排序这个矩阵需要O(n^2)的时间复杂度。
好的,排序了以后再遍历这个矩阵,再用O(n^2)的时间复杂度就可以去除重复了:
- void _inner_sort_bits(bool** pArr, int n, int i, int nDeep);
- bool Equal(bool* p1, bool* p2, int n)
- {
- assert(p1 && p2 && n > 0);
- for (int i = 0; i < n; i++)
- {
- if (p1[i] != p2[i])
- return false;
- }
- return true;
- }
- void PrintBitArray(bool* p, int n)
- {
- assert(p && n > 0);
- for (int i = 0; i < n; i++)
- {
- if (p[i])
- cout<<1<<" ";
- else
- cout<<0<<" ";
- }
- cout<<endl;
- }
- void SortBitMatrix(bool** pArr, int n)
- {
- assert(pArr && n > 0);
- _inner_sort_bits(pArr, n, 0, n);
- }
复制代码 |
|