CodingBat Java fix45 разве эти циклы while по сути работают как для циклов? - PullRequest
0 голосов
/ 16 декабря 2018

Возвращает массив, который содержит в точности те же числа, что и данный массив, но переставлен так, что после каждых 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

1 Ответ

0 голосов
/ 16 декабря 2018

Таким образом, на высоком уровне код находит следующий индекс «5» в массиве, затем следующий индекс «4» и затем меняет то, что следует после 4 (i + 1) на 5, найденный впредыдущий поиск.Затем находим следующие 5 и повторяем процесс до конца массива.

Автор этого кода использовал i и j для отслеживания положения 4 и 5.

i - текущая позиция 4

j - текущая позиция 5

Сначала они находят следующие 5, затем следующие 4, а затем меняют один после 4 на 5(к).Мне немного любопытно, что происходит в случае 4 в конце массива ...

Вы помещаете 4 в начале массива?Что если там есть «4»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...