タスクは2つのステップで構成されています。あなたは、ベクター内の重複する要素を許可するため、既存の要素を挿入したいしたい場合は、
match v.binary_search(&new_elem) {
Ok(pos) => {} // element already in vector @ `pos`
Err(pos) => v.insert(pos, new_elem),
}
:binary_search
で挿入位置を見つけ、Vec::insert()
を挿入しますそれがさらに短く書くことができます。
let pos = v.binary_search(&new_elem).unwrap_or_else(|e| e);
v.insert(pos, new_elem);
しかしを:可能これは実行時の複雑さがO(n)であることを示しています。中央に挿入するには、挿入位置の右にあるすべての要素を右に移動する必要があります。
だから、はでサイズが小さくないベクトルにいくつかの要素を挿入する必要がありません。特に、は、この挿入ソートアルゴリズムがO(n²)で実行されるため、このメソッドを使用してベクトルをソートするべきではありません。
BinaryHeap
は、このような状況では、より良い選択かもしれません。各インサート(push
)は、O(n)ではなくO(log n)というランタイムの複雑さを持ちます。あなたが望むならば、それをとinto_sorted_vec()
とソートしたものに変換することもできます。ヒープを変換せずに引き続き使用することもできます。
Vecに実装されている 'binary_search'と' insert'メソッドがあります。だから、適切なインデックスを見つけてそこに新しい要素を挿入してください。 –
この質問は何が悪いのですか? – SoniEx2
@ SoniEx2なぜ人々がそれを落としたのか分かりませんが、いくつかのコードを追加してください。これは特定の変数に名前をつけます - 答えはそれらの名前を簡単に参照することができます。あなたはまた、 "何が**最高の** [または**最短の**]方法です"と尋ねることができます。 –