假设我们有一个基于数组的表A[0..N-1],并且我们想删除所有相同的元素 给出一个算法以O(Nlog(N))解决该问题。 1. 题目给出的引子 2. 目前我的方法 下面是题目中给出的引子 for (i = 0; i < LastPostion; i++) { j = i + 1; while( j < LastPostion) if ( A[i] == A[j]) Delete(j); else j++; } 目前我想到的方法 使用二叉树 typedef _BinTree BinTree; struct _BinTree { element e; BinTree *BTree; BinTree *LTree; }; 思路是 BinTree btree; for look_up_array(a) { e = get_array_element(); InsertBinTree(e, &btree); } InsertBinTree(element e, BinTree *b) { if(e == b->e) return; if(e > b->e) { if(b->BTree) InsertBinTree(e, b->BinTree); else { b->BTree = Alloc(BinTree); InitBinTree(b->BTree); b->BTree->e = e; return; } } if(e < b->e) { if(b->LTree) InsertBinTree(e, b->LinTree); else { b->LTree = Alloc(BinTree); InitBinTree(b->LTree); b->LTree->e = e; return; } } };