Перестановки чисел массива, как волна


Дан массив целых чисел, отсортировать массив в волны, как массив и вернуть его, иными словами, расположить элементы в такой последовательности что А1 >= А2 <= А3 >= А4 <= А5.....

Пример

Учитывая [1, 2, 3, 4]

Один из возможных ответов: [2, 1, 4, 3]
Еще один возможный ответ : [4, 1, 3, 2]

Примечание: Если возможны несколько ответов, вернуть это лексикографически наименьший. Так, в Примере случае, вы вернетесь [2, 1, 4, 3]

Мой подход:

public class Solution {
    public ArrayList<Integer> wave(ArrayList<Integer> A) {

        Collections.sort(A);
        int swap1, swap2,temp1,temp2;
        //We will have to swap all the odd numbered elements with the even numbered elements
        //such that all numbers with a gap 0f 1 are sorted
        for( swap1= 0, swap2 = swap1 + 1; swap1 <= A.size()- 2; swap1 = swap1+2,swap2 = swap2+2 )
            {
                //Check if swap1 reaches last element
                if( (swap1 == A.size() - 1) || (swap2 == A.size()) )
                    break;
                else
                    {
                        temp1 = A.get(swap1);
                        temp2 = A.get(swap2);
                        A.set(swap1,temp2);
                        A.set(swap2, temp1);
                    }
            }
        return A;
    }
}

У меня есть следующие вопросы относительно моего кода:

  1. Как я могу оптимизировать мой код? (Я не в состоянии решить эти вопросы в течение установленного срока. Что я могу сделать?)

  2. Есть ли лучший подход, чтобы сделать этот вопрос?

  3. Я нарушил какой-либо конвенции при кодировании?

  4. Есть ли избыточность в моем подходе?

Ссылка



Комментарии
1 ответ

Несколько замечаний.


  1. Вам не нужно поддерживать swap2 отдельно, это всегда swap1 + 1Так может быть просто объявлена внутри цикла тело.

  2. Ваши границы внутри тела цикла является избыточным, только условие цикла достаточно.

  3. Вы, вероятно, выполняя слишком много инт-к-целое число и обратно преобразования. Даже более того, вопрос сделок с массивами, вам не нужно предварительно преобразовать параметр в список. Принимать, обрабатывать и возвращать массив простых ИНЦ.

1
ответ дан 19 марта 2018 в 03:03 Источник Поделиться