/ / Array-3 fix45 kódovanie bat - java, polia

Array-3 fix45 kódovanie bat - java, polia

Snažím sa vyriešiť problém s poľom kódovania úloh

Vráťte pole, ktoré obsahuje presne to istéčísla ako dané pole, ale preusporiadané tak, aby každý 4 bezprostredne nasledoval 5. Nehýbte 4 ", ale každé iné číslo sa môže pohybovať. Pole obsahuje rovnaké číslo 4" s a 5 "s, a každé 4 má po ňom číslo, ktoré nie je 4. V tejto verzii sa 5 "môže objaviť kdekoľvek v pôvodnom poli.

môj kód prechádza všetky testy s výnimkou nižšie uvedeného

([4, 9, 4, 9, 5, 5, 4, 9, 5]) → [4, 5, 4, 5, 9, 9, 4, 5, 9]

tu je môj kód

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;
}

môj kód sa vracia

[4, 5, 4, 5, 9, 5, 4, 9, 9]

ak mi niekto môže pomôcť zistiť, čo potrebujem na vylepšenie, aby to prešlo posledným testom, ďakujem

odpovede:

0 pre odpoveď č. 1

Môžete použiť príznak, aby sa vaša druhá slučka zastavilaiterating, keď nájde ďalší element 5. Taktiež namiesto Iterating od 0 na druhej slučke by ste mohli opakovať od i namiesto toho sa stáva efektívnejším.

    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;
}
}

0 pre odpoveď č. 2

Nastavíte lastF na j, keď ho nastavíte na i + 2. Nahradiť i + 1 s j, takže by ste mali nastaviť lastF na jednu po i + 1 (i + 2) namiesto j. Tiež musíte spustiť j-forloop na lastF.

Mal by vyzerať takto:

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;
}
}