私は割り当てがバットをコーディングする際にArrayの問題を解決しようとしています
まったく同じ配列を返す配列は4と5の同じ数を持ち、配列は同じ数の4と5を持ちます。それ以降の数字は4ではありません。このバージョンでは、元の配列のどこにでも5が表示されます。
私のコードは以下のものを除くすべてのテストに合格します
([4, 9, 4, 9, 5, 5, 4, 9, 5]) → [4, 5, 4, 5, 9, 9, 4, 5, 9]
ここに私のコードです
public int[] fix45(int[] nums) {
int val =0, lastF = 0, var;
for (int i =0; i < nums.length-1; i++)
if (nums[i] == 4){
var = i+1;
for (int j = 0; j < nums.length; j++)
if ((nums[j] == 5) && (j >= lastF && j != var)){
lastF =j;
val = nums[i+1];
nums[i+1] = nums[j];
nums[j] = val;
}
}
return nums;
}
私のコードが返す
[4, 5, 4, 5, 9, 5, 4, 9, 9]
この最後のテストに合格するために誰かが微調整する必要があることを誰かが助けてくれれば、ありがとう
回答:
回答№1は02番目のループが停止するようにフラグを使用できます次の要素が見つかるとそれを繰り返します。また、2番目のループで0から反復する代わりに、代わりにiから反復して効率的になります。
boolean isFound = false;
for (int i = 0; i < nums.length - 1; i++) {
if (nums[i] == 4) {
var = i + 1;
for (int j = i; j < nums.length && !isFound ; j++) {
if ((nums[j] == 5) && (j >= lastF && j != var)) {
lastF = j;
val = nums[i + 1];
nums[i + 1] = nums[j];
nums[j] = val;
isFound = true;
}
}
isFound = false;
}
}
回答№2の場合は0
i + 2に設定するときはlastFをjに設定します。 i + 1をjに置き換えているので、lastFをjの代わりにi + 1(i + 2)の後に設定する必要があります。また、lastFでj-forloopを起動する必要があります。
これは次のようになります。
int val =0, lastF = 0, var;
for (int i =0; i < nums.length; i++)
if (nums[i] == 4){
var = i+1;
for (int j = lastF; j < nums.length; j++)
if ((nums[j] == 5) && (j >= lastF && j != var)){
lastF =i+2;
val = nums[i+1];
nums[i+1] = nums[j];
nums[j] = val;
}
}