ソートされた配列を取得するために隣接する要素間で必要なスワップの数を最小限に抑えるために使用できるさまざまな方法があります。指定された出力配列には 2 種類の要素 (0 と 1) のみが含まれています。この問題を解決する 2 つの異なる方法について説明します。1 つ目の解決策はゼロの数を格納するために追加のスペースを使用しますが、2 つ目の解決策は定数スペースのみを使用します。
###問題文###Example
の中国語訳は次のとおりです:方法 1
Example
の中国語訳は次のとおりです:上記の C プログラムを実行すると、次の出力が生成されます -
リーリー このメソッドの時間計算量- ループ内で n 回繰り返すため、時間計算量は次のようになります: O(n)
空間複雑度 - ゼロの数を格納するために追加の配列を使用するため、このメソッドの空間複雑度は O(n)
です。次に、同じ問題に対するより適切で効率的な解決策を見てみましょう。私たちの新しいソリューションは追加のスペースを占有しないため、メモリを節約します。 方法 2
このアプローチでは、補助スペースを最小化して一定のスペースにします。配列を最初から読み取る代わりに、最後から繰り返して、見つかったすべてのゼロの数を数えます。 1 を取得した場合、その 1 をソートされた位置に配置するために必要なスワップの数は、その前に出現したゼロの数になります。
Example
- 余分な空間を使用していないため、空間複雑度は線形、つまり O(1) です。 この記事では、0 と 1 のみを含む配列をソートするために必要なスワップの最小数を計算する 2 つの方法について説明しました。最初のアプローチでは、各ステップの解を保存するために追加の配列を使用しましたが、2 番目のアプローチでは、一定の空間でそれを実行したため、空間の複雑さが改善されました。
以上がバイナリ配列が指定された場合、それをソートするために必要な隣接するスワップの最小数の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。