package
0.0.0-20241221191246-b80a13d7bbe0
Repository: https://github.com/yvv4git/go-algorithms.git
Documentation: pkg.go.dev
# README
324. Wiggle Sort II
Level - medium
Task
Given an integer array nums, reorder it such that nums[0] < nums[1] > nums[2] < nums[3]....
You may assume the input array always has a valid answer.
Объяснение
Задача требует от нас переставить элементы массива таким образом, чтобы они удовлетворяли условию "wiggle sort".
Формально, для массива nums длины n должно выполняться следующее условие:
nums[0] < nums[1] > nums[2] < nums[3] > ...
Это означает, что элементы должны чередоваться так, чтобы каждый второй элемент был больше своих соседей.
Примеры:
- Для nums = [1, 5, 1, 1, 6, 4], одно из возможных решений может быть [1, 6, 1, 5, 1, 4].
- Для nums = [1, 3, 2, 2, 3, 1], одно из возможных решений может быть [2, 3, 1, 3, 1, 2].
Основные шаги для решения:
- Сортировка массива.
Сначала отсортируем массив. - Разделение на две части.
Разделим отсортированный массив на две части. Если длина массива нечетная, первая часть будет на один элемент больше. - Создание результирующего массива.
Заполним результирующий массив, чередуя элементы из первой и второй частей.
Example 1:
Input: nums = [1,5,1,1,6,4]
Output: [1,6,1,5,1,4]
Explanation: [1,4,1,5,1,6] is also accepted.
Example 2:
Input: nums = [1,3,2,2,3,1]
Output: [2,3,1,3,1,2]
Constraints:
- 1 <= nums.length <= 5 * 10^4
- 0 <= nums[i] <= 5000
- It is guaranteed that there will be an answer for the given input nums.
Follow Up
Can you do it in O(n) time and/or in-place with O(1) extra space?