C ++のランダムな整数の配列で、すべて0を開始に移動し、1を終了に移動します
このチュートリアルでは、すべての0を配列の前に移動し、1を配列の最後に移動するプログラムを作成します。
ランダムな整数とともに0と1の配列が与えられます。すべてのゼロを配列の開始に移動し、1を配列の最後に移動する必要があります。例を見てみましょう。
入力
arr = [4, 5, 1, 1, 0, 0, 2, 0, 3, 1, 0, 1]
出力
0 0 0 0 4 5 2 3 1 1 1 1
アルゴリズム
-
アレイを初期化します。
-
インデックスを1に初期化します。
-
指定された配列を繰り返し処理します。
-
現在の要素がゼロでない場合は、インデックスの値を現在の要素で更新します。
-
インデックスをインクリメントします。
-
-
上記のインデックスからnまで繰り返すループを作成します
-
すべての要素を1に更新します。
-
-
同様に、 0に対しても実行します 。インデックスを増やす代わりに、インデックスを減らして、すべてのゼロを配列の前に移動します。
実装
以下は、C++での上記のアルゴリズムの実装です
#include <bits/stdc++.h>
using namespace std;
void update1And0Positions(int arr[], int n) {
int index = 0;
for (int i = 0; i < n; i++) {
if (arr[i] != 1) {
arr[index++] = arr[i];
}
}
while (index < n) {
arr[index++] = 1;
}
index = 0;
for (int i = n - 1; i >= 0; i--) {
if (arr[i] == 1) {
continue;
}
if (!index) {
index = i;
}
if (arr[i] != 0) {
arr[index--] = arr[i];
}
}
while (index >= 0) {
arr[index--] = 0;
}
}
int main() {
int arr[] = { 4, 5, 1, 1, 0, 0, 2, 0, 3, 1, 0, 1 };
int n = 12;
update1And0Positions(arr, n);
for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}
cout << endl;
return 0;
} 出力
上記のコードを実行すると、次の結果が得られます。
0 0 0 0 4 5 2 3 1 1 1 1
-
配列を分割して最初の部分を最後に追加するC++プログラム?
ここでは、配列を分割する方法と、最後の位置で分割した後に最初の部分を追加する方法を説明します。配列の内容が{0、1、2、3、4、5、6、7、8、9}であるとします。このイントロを2つの部分にカットしたいと思います。最初の部分はインデックス0から3(分割サイズ4)で、2番目の部分は残りです。最後に最初の部分を追加すると、配列要素は次のようになります{4、5、6、7、8、9、0、1、2、3}。この問題を解決するために、このアルゴリズムに従います。 アルゴリズム splitArray(arr、n、k) begin for i := 0 to k, do &n
-
C#を使用して、指定された整数の配列からすべてのゼロを配列の最後に移動するにはどうすればよいですか?
メソッドMoveZerosを作成し、配列をトラバースして、配列内のゼロの数を数えます。カウントサイズに基づいて、すべての最終セルをゼロにします。配列の長さがnullまたは空の場合、処理せずに戻ります。最終結果はnums配列になります。配列を1回トラバースしているため、時間計算量はO(N)です。 時間計算量 − O(N) スペースの複雑さ − o(1) 例 public class Arrays{ public void MoveZeros(int[] nums){ if (nums == null || nums.Length