配列内の要素を頻度で並べ替えたい。
Input: 2 5 2 8 5 6 8 8
Output: 8 8 8 2 2 5 5 6
これに対する1つの解決策は次のとおりです。
- クイックソートまたはマージソートを使用して要素をソートします。O(nlogn)
- ソートされた配列をスキャンして、要素とカウントの 2D 配列を作成します。の上)
- カウントに従って、構築された 2D 配列を並べ替えます。O(nlogn)
私が読んだ他の考えられる方法の中で、1 つは二分探索木を使用し、もう 1 つはハッシュを使用します。
誰かが私にもっと良いアルゴリズムを提案できますか? 複雑さを軽減できないことはわかっています。しかし、私は非常に多くのトラバーサルを避けたいと思っています。