280. Wiggle Sort
leetcode medium
#array#csharp#leetcode#medium#sort
Task
Дан целочисленный массив nums, упорядочьте его так, чтобы nums[0] <= nums[1] >= nums[2] <= nums[3]....
Вы можете считать, что входной массив всегда имеет допустимый ответ.
Пример:
Input: nums = [3,5,2,1,6,4]
Output: [3,5,1,6,2,4]
Explanation: [1,6,2,5,3,4] is also accepted.
C# solution
matched/originalpublic class Solution {
private void Swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public void WiggleSort(int[] nums) {
for (int i = 0; i < nums.Length - 1; i++) {
if ((i % 2 == 0 && nums[i] > nums[i + 1]) || (i % 2 == 1 && nums[i] < nums[i + 1])) {
Swap(nums, i, i + 1);
}
}
}
}C++ solution
auto-draft, review before submit#include <bits/stdc++.h>
using namespace std;
// Auto-generated C++ draft from the C# solution. Review containers, LINQ and helper types before submit.
class Solution {
public:
private void Swap(vector<int>& nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public void WiggleSort(vector<int>& nums) {
for (int i = 0; i < nums.size() - 1; i++) {
if ((i % 2 == 0 && nums[i] > nums[i + 1]) || (i % 2 == 1 && nums[i] < nums[i + 1])) {
Swap(nums, i, i + 1);
}
}
}
}Java solution
matched/originalclass Solution {
public void swap(int[] nums, int i, int j) {
int temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
public void wiggleSort(int[] nums) {
for (int i = 0; i < nums.length - 1; i++) {
if (((i % 2 == 0) && nums[i] > nums[i + 1])
|| ((i % 2 == 1) && nums[i] < nums[i + 1])) {
swap(nums, i, i + 1);
}
}
}
}JavaScript solution
matched/originalclass Solution {
swap(nums, i, j) {
const temp = nums[i];
nums[i] = nums[j];
nums[j] = temp;
}
wiggleSort(nums) {
for (let i = 0; i < nums.length - 1; i++) {
if ((i % 2 === 0 && nums[i] > nums[i + 1]) || (i % 2 === 1 && nums[i] < nums[i + 1])) {
this.swap(nums, i, i + 1);
}
}
}
}Python solution
matched/originalclass Solution:
def swap(self, nums, i, j):
nums[i], nums[j] = nums[j], nums[i]
def wiggleSort(self, nums):
for i in range(len(nums) - 1):
if (i % 2 == 0 and nums[i] > nums[i + 1]) or (i % 2 == 1 and nums[i] < nums[i + 1]):
self.swap(nums, i, i + 1)Go solution
matched/originalfunc swap(nums []int, i, j int) {
nums[i], nums[j] = nums[j], nums[i]
}
func wiggleSort(nums []int) {
for i := 0; i < len(nums)-1; i++ {
if (i%2 == 0 && nums[i] > nums[i+1]) || (i%2 == 1 && nums[i] < nums[i+1]) {
swap(nums, i, i+1)
}
}
}Explanation
Algorithm
Итерируйтесь по каждому элементу с индексом i в массиве nums, начиная с 0 и до nums.length - 2, так как последний элемент не имеет следующего элемента для обмена.
Проверьте, является ли i четным и nums[i] > nums[i + 1]. Если это так, поменяйте местами nums[i] и nums[i + 1].
Проверьте, является ли i нечетным и nums[i] < nums[i + 1]. Если это так, поменяйте местами nums[i] и nums[i + 1].
😎