私はこれを解決しようとしてきました:
配列があるとします:
int[] n = {0, 0, -1, 1, 0, 1, 1, -1, 1};
配列を並べ替えることができる必要があり、その前にゼロ以外のゼロがある場合は、それらを交換する必要があります。
例えば:0, 0, -1, 1, 0, 1, 1, -1, 1
となります:0, 0, -1, 0, 1, 1, 1, -1, 1
私は運がないforループとステートメントを使用してそれをやろうとしています。if任意のヒント?
これを試して:
for (int i = 1 ; i < n.length ; i++)
if (n[i] == 0 && n[i - 1] != 0) {
int tmp = n[i - 1];
n[i - 1] = n[i];
n[i] = tmp;
}
本体にステートメントを含むforループが必要になると考えたのは正しかったです。ifここで行っているのは、要素 1 から始まる配列をループすることだけです。次に、現在の要素が で0 あり、前の要素がそうでないかどうかを確認し0ますif (n[i] == 0 && n[i - 1] != 0)。この条件が true の場合、これら 2 つの要素を交換します。
for(int i=0; i < length; i++)
{
if(i > 0 && arr[i] == 0 && arr[i-1] != 0)
{
int temp = arr[i-1];
arr[i-1] = arr[i];
arr[i] = temp;
}
}
動作するはずです。
ビットいじりを使用しない場合、2 つのオブジェクトを交換するために一時変数が必要になります。例:
int[] n = {...};
int temp = n[3]; // swaps n[3] and n[4]
n[3] = n[4];
n[4] = temp;
このようなものをループ内に貼り付けて、説明したことを達成できます。