Есть ли более простое решение для Codingbat fix45?

Стив М:

Я пытаюсь решить эту проблему CodingBat:

(Это немного более сложная версия проблемы fix34.) Возвращает массив, содержащий точно такие же числа, что и данный массив, но переупорядоченный так, чтобы за каждыми 4 сразу следовала 5. Не перемещайте 4, а все остальные числа может двигаться. Массив содержит одинаковое количество четверок и пятерок, и после каждой четверки стоит число, отличное от 4. В этой версии пятерки могут появляться в любом месте исходного массива.

fix45({5, 4, 9, 4, 9, 5}) → {9, 4, 5, 4, 5, 9}
fix45({1, 4, 1, 5}) → {1, 4, 5, 1}
fix45({1, 4, 1, 5, 5, 4, 1}) → {1, 4, 5, 1, 1, 4, 5}

Сначала я использовал метод, который прошел все тесты сайтов, но не думаю, что он сработает для более длинных массивов. Первоначальный метод использовал 2 цикла и не использовал новый массив. Я создал решение, которое вводит новый массив и третий вложенный цикл, и я считаю, что оно будет работать для всех экземпляров проблемы. Однако на сайте указано, что проблемы в этом разделе могут быть решены с помощью двух циклов, поэтому мне интересно, действительно ли существует решение с двумя циклами, которое будет работать для любого случая проблемы. Вот вопрос и мое решение из трех петель:

public int[] fix45(int[] nums) {

    int[] locations = {-1};

    for (int i = 0; i < nums.length - 1; ++i) {

        if (nums[i] == 4) {

            JLoop:
            for (int j = nums.length-1; j >= 0; --j) {
                if (nums[j] == 5) {
                    for (int k = locations.length-1; k>=0 ; --k) {
                        if (locations[k] == j) {
                            continue JLoop;
                        } 
                    }
                    nums[j] = nums[i + 1];
                    nums[i + 1] = 5;
                    locations[locations.length - 1] = i+1;
                    locations = java.util.Arrays.copyOf(locations,
                            locations.length + 1);
                    locations[locations.length-1] = -1;
                    break;
                }
            }
        }
    }
    return nums;

}
Патрисия Шанахан:

Повторный запуск поиска подходящей 5 с одного конца массива каждый раз, когда обнаруживается 4, кажется расточительным. Часть массива уже просканирована и, как известно, не содержит 5, которую можно перемещать. Это время O (n) и пространство O (1).

    public static int[] fix45(int[] nums) {

      int j = 0;
      for (int i = 0; i < nums.length - 1; ++i) {
        if (nums[i] == 4 && nums[i + 1] != 5) {
          /*
           * Need to find the next movable 5 That means an element that is 5 and
           * either is the first element or is preceded by anything other than 4
           */
          while (nums[j] != 5 || (j != 0 && nums[j - 1] == 4)) {
            j++;
          }
          nums[j] = nums[i + 1];
          nums[i + 1] = 5;
        }
      }
      return nums;
    }

Эта статья взята из Интернета, укажите источник при перепечатке.

Если есть какие-либо нарушения, пожалуйста, свяжитесь с[email protected] Удалить.

Отредактировано в
0

я говорю два предложения

0обзор
Войти в системуУчаствуйте в комментариях

Статьи по теме

рекурсивное упражнение по codingbat

Рекурсия codingbat

Codingbat strDist: упражнение на рекурсию

CodingBat sameEnds работает со строками

twoTwo загадка от CodingBat

Практический вопрос CodingBat - строки Python

Java Codingbat notAlone - почему он не работает для этого конкретного примера

проблема вычитания рекурсии от CodingBat.com

codingbat Проблема: close_far | провалив только один тест | пятка

Défi Codingbat : maxBlock

Я не понимаю, почему этот код работает (Codingbat Array2 tenRun)

Array-2 zeromax codingbat

Проблема CodingBat string_bits решена с помощью цикла Swit for

Есть ли более простой способ сделать string_match из CodingBat в Python?

CodingBat-Excercise: возвращает истину, если данный массив содержит несчастливую 1 в первых 2 или последних 2 позициях в массиве.

CodingBat AP-1,任务号。4?

Как распечатать результат из функции (мое расширение вопроса Codingbat: Warmup-1> near_hundred)

Есть ли более простой способ сделать rotate_left3 на CodingBat Python?

Codingbat challenge: mirrorEnds Stream API Solution

Я получаю сообщение об ошибке Time Out, когда отправляю свой код на CodingBat Python (https://codingbat.com/prob/p118406)

list index out of range - CodingBat Problem - Has22

CodingBat split53; Confused about the right way to use returns

CodingBat Python make_chocolate code failing in "other tests"

Défi Codingbat : solution d'API zeroFront Stream

Défi Codingbat : solution d'API de flux sumNumbers

Défi Codingbat : mirrorEnds utilisant l'API Stream

Défi Codingbat : solution d'API de flux zeroMax

Défi Codingbat : solution d'API de flux sameEnds

Codingbat チャレンジ: notAlone ストリーム API ソリューション

TOP список

  1. 1

    Распределение Рэлея Curve_fit на Python

  2. 2

    TypeError: store.getState não é uma função. (Em 'store.getState ()', 'store.getState' é indefinido, como posso resolver esse problema?

  3. 3

    В типе Observable <unknown> отсутствуют следующие свойства из типа Promise <any>.

  4. 4

    Как добавить Swagger в веб-API с поддержкой OData, работающий на ASP.NET Core 3.1

  5. 5

    How to click an array of links in puppeteer?

  6. 6

    Merging legends in plotly subplot

  7. 7

    ViewPager2 мигает / перезагружается при смахивании

  8. 8

    Отчеты Fabric Debug Craslytic: регистрация, отсутствует идентификатор сборки, применить плагин: io.fabric

  9. 9

    How to normalize different curves drawn with geom = "step" when using stat_summary

  10. 10

    无法通过Vue在传单中加载pixiOverlay

  11. 11

    как я могу удалить vue cli 2?

  12. 12

    Как я могу нарисовать заполненный прямоугольник в JFreeChart?

  13. 13

    SQL Вычтите две строки друг от друга в одном столбце, чтобы получить результат

  14. 14

    Elasticsearch - Нечеткий поиск не дает предложения

  15. 15

    Single legend for Plotly subplot for line plots created from two data frames in R

  16. 16

    Описание моего типа Parser как серии преобразователей монад

  17. 17

    Как изменить цвета запятых и скобок в VS Code

  18. 18

    Сброс значения <input type = "time"> в Firefox

  19. 19

    Почему прокси в vue.config.js 404

  20. 20

    Как установить параметр -noverify с gradle ktx для робоэлектрических тестов Android?

  21. 21

    В чем разница между ifstream, ofstream и fstream?

популярныйтег

файл