Возвращает массив, который содержит в точности те же числа, что и данный массив, но переставлен так, что после каждых 4 сразу следует 5. Не перемещайте 4, но могут перемещаться все остальные числа.Массив содержит одинаковое число 4 и 5, и после каждого 4 после него есть номер, который не является 4. В этой версии 5 могут появляться в любом месте исходного массива.
Я думаю, что этопроблема была задана несколько раз здесь.У меня были проблемы с поиском правильного решения, и после многократных попыток я решил найти возможное решение.Но теперь я запутался еще больше, потому что, хотя между моим кодом и принятым решением есть определенные различия, я чувствую, что они должны работать одинаково.
Ниже мой код,
public int[] fix45(int[] nums) {
int lastfive = 0;
for(int k = 0; k < nums.length-1; k++)
{
if(nums[k] == 4)
{
while((nums[lastfive]!=5) || (lastfive == k+1))
{
lastfive++;
}
}
int temp = nums[k+1];
nums[k+1] = nums[lastfive];
nums[lastfive] = temp;
//lastfive = lastfive+1;
}
return nums;
}
и ниже приведено общепринятое решение на GitHub:
public int[] fix45(int[] nums) {
int i = 0;
int j = 0;
while(j < nums.length && nums[j] != 5)
j++;
while(i < nums.length) {
if(nums[i] == 4) {
int temp = nums[i+1];
nums[i+1] = nums[j];
nums[j] = temp;
while((j < nums.length && nums[j] != 5) || j == i + 1)
j++;
}
i++;
}
return nums;
}
Я распознаю решение, используя циклы while, но используя j