Skip to content

Commit bb0b29a

Browse files
committed
feat: add solutions to lc problem: No.0324
No.0324.Wiggle Sort II
1 parent 23ce835 commit bb0b29a

File tree

6 files changed

+396
-0
lines changed

6 files changed

+396
-0
lines changed

solution/0300-0399/0324.Wiggle Sort II/README.md

Lines changed: 170 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,192 @@
4545

4646
<!-- 这里可写通用的实现逻辑 -->
4747

48+
**方法一:排序**
49+
50+
**方法二:桶排序**
51+
4852
<!-- tabs:start -->
4953

5054
### **Python3**
5155

5256
<!-- 这里可写当前语言的特殊实现逻辑 -->
5357

5458
```python
59+
class Solution:
60+
def wiggleSort(self, nums: List[int]) -> None:
61+
"""
62+
Do not return anything, modify nums in-place instead.
63+
"""
64+
arr = sorted(nums)
65+
n = len(arr)
66+
i, j = (n - 1) >> 1, n - 1
67+
for k in range(n):
68+
if k % 2 == 0:
69+
nums[k] = arr[i]
70+
i -= 1
71+
else:
72+
nums[k] = arr[j]
73+
j -= 1
74+
```
5575

76+
```python
77+
class Solution:
78+
def wiggleSort(self, nums: List[int]) -> None:
79+
"""
80+
Do not return anything, modify nums in-place instead.
81+
"""
82+
bucket = [0] * 5001
83+
for v in nums:
84+
bucket[v] += 1
85+
n = len(nums)
86+
j = 5000
87+
for i in range(1, n, 2):
88+
while bucket[j] == 0:
89+
j -= 1
90+
nums[i] = j
91+
bucket[j] -= 1
92+
for i in range(0, n, 2):
93+
while bucket[j] == 0:
94+
j -= 1
95+
nums[i] = j
96+
bucket[j] -= 1
5697
```
5798

5899
### **Java**
59100

60101
<!-- 这里可写当前语言的特殊实现逻辑 -->
61102

62103
```java
104+
class Solution {
105+
public void wiggleSort(int[] nums) {
106+
int[] arr = nums.clone();
107+
Arrays.sort(arr);
108+
int n = nums.length;
109+
int i = (n - 1) >> 1, j = n - 1;
110+
for (int k = 0; k < n; ++k) {
111+
if (k % 2 == 0) {
112+
nums[k] = arr[i--];
113+
} else {
114+
nums[k] = arr[j--];
115+
}
116+
}
117+
}
118+
}
119+
```
120+
121+
```java
122+
class Solution {
123+
public void wiggleSort(int[] nums) {
124+
int[] bucket = new int[5001];
125+
for (int v : nums) {
126+
++bucket[v];
127+
}
128+
int n = nums.length;
129+
int j = 5000;
130+
for (int i = 1; i < n; i += 2) {
131+
while (bucket[j] == 0) {
132+
--j;
133+
}
134+
nums[i] = j;
135+
--bucket[j];
136+
}
137+
for (int i = 0; i < n; i += 2) {
138+
while (bucket[j] == 0) {
139+
--j;
140+
}
141+
nums[i] = j;
142+
--bucket[j];
143+
}
144+
}
145+
}
146+
```
147+
148+
### **C++**
149+
150+
```cpp
151+
class Solution {
152+
public:
153+
void wiggleSort(vector<int>& nums) {
154+
vector<int> arr = nums;
155+
sort(arr.begin(), arr.end());
156+
int n = nums.size();
157+
int i = (n - 1) >> 1, j = n - 1;
158+
for (int k = 0; k < n; ++k)
159+
{
160+
if (k % 2 == 0) nums[k] = arr[i--];
161+
else nums[k] = arr[j--];
162+
}
163+
}
164+
};
165+
```
166+
167+
```cpp
168+
class Solution {
169+
public:
170+
void wiggleSort(vector<int>& nums) {
171+
vector<int> bucket(5001);
172+
for (int& v : nums) ++bucket[v];
173+
int n = nums.size();
174+
int j = 5000;
175+
for (int i = 1; i < n; i += 2)
176+
{
177+
while (bucket[j] == 0) --j;
178+
nums[i] = j;
179+
--bucket[j];
180+
}
181+
for (int i = 0; i < n; i += 2)
182+
{
183+
while (bucket[j] == 0) --j;
184+
nums[i] = j;
185+
--bucket[j];
186+
}
187+
}
188+
};
189+
```
190+
191+
### **Go**
192+
193+
```go
194+
func wiggleSort(nums []int) {
195+
n := len(nums)
196+
arr := make([]int, n)
197+
copy(arr, nums)
198+
sort.Ints(arr)
199+
i, j := (n-1)>>1, n-1
200+
for k := 0; k < n; k++ {
201+
if k%2 == 0 {
202+
nums[k] = arr[i]
203+
i--
204+
} else {
205+
nums[k] = arr[j]
206+
j--
207+
}
208+
}
209+
}
210+
```
63211

212+
```go
213+
func wiggleSort(nums []int) {
214+
bucket := make([]int, 5001)
215+
for _, v := range nums {
216+
bucket[v]++
217+
}
218+
n, j := len(nums), 5000
219+
for i := 1; i < n; i += 2 {
220+
for bucket[j] == 0 {
221+
j--
222+
}
223+
nums[i] = j
224+
bucket[j]--
225+
}
226+
for i := 0; i < n; i += 2 {
227+
for bucket[j] == 0 {
228+
j--
229+
}
230+
nums[i] = j
231+
bucket[j]--
232+
}
233+
}
64234
```
65235

66236
### **...**

solution/0300-0399/0324.Wiggle Sort II/README_EN.md

Lines changed: 166 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,179 @@
4343
### **Python3**
4444

4545
```python
46+
class Solution:
47+
def wiggleSort(self, nums: List[int]) -> None:
48+
"""
49+
Do not return anything, modify nums in-place instead.
50+
"""
51+
arr = sorted(nums)
52+
n = len(arr)
53+
i, j = (n - 1) >> 1, n - 1
54+
for k in range(n):
55+
if k % 2 == 0:
56+
nums[k] = arr[i]
57+
i -= 1
58+
else:
59+
nums[k] = arr[j]
60+
j -= 1
61+
```
4662

63+
```python
64+
class Solution:
65+
def wiggleSort(self, nums: List[int]) -> None:
66+
"""
67+
Do not return anything, modify nums in-place instead.
68+
"""
69+
bucket = [0] * 5001
70+
for v in nums:
71+
bucket[v] += 1
72+
n = len(nums)
73+
j = 5000
74+
for i in range(1, n, 2):
75+
while bucket[j] == 0:
76+
j -= 1
77+
nums[i] = j
78+
bucket[j] -= 1
79+
for i in range(0, n, 2):
80+
while bucket[j] == 0:
81+
j -= 1
82+
nums[i] = j
83+
bucket[j] -= 1
4784
```
4885

4986
### **Java**
5087

5188
```java
89+
class Solution {
90+
public void wiggleSort(int[] nums) {
91+
int[] arr = nums.clone();
92+
Arrays.sort(arr);
93+
int n = nums.length;
94+
int i = (n - 1) >> 1, j = n - 1;
95+
for (int k = 0; k < n; ++k) {
96+
if (k % 2 == 0) {
97+
nums[k] = arr[i--];
98+
} else {
99+
nums[k] = arr[j--];
100+
}
101+
}
102+
}
103+
}
104+
```
105+
106+
```java
107+
class Solution {
108+
public void wiggleSort(int[] nums) {
109+
int[] bucket = new int[5001];
110+
for (int v : nums) {
111+
++bucket[v];
112+
}
113+
int n = nums.length;
114+
int j = 5000;
115+
for (int i = 1; i < n; i += 2) {
116+
while (bucket[j] == 0) {
117+
--j;
118+
}
119+
nums[i] = j;
120+
--bucket[j];
121+
}
122+
for (int i = 0; i < n; i += 2) {
123+
while (bucket[j] == 0) {
124+
--j;
125+
}
126+
nums[i] = j;
127+
--bucket[j];
128+
}
129+
}
130+
}
131+
```
132+
133+
### **C++**
134+
135+
```cpp
136+
class Solution {
137+
public:
138+
void wiggleSort(vector<int>& nums) {
139+
vector<int> arr = nums;
140+
sort(arr.begin(), arr.end());
141+
int n = nums.size();
142+
int i = (n - 1) >> 1, j = n - 1;
143+
for (int k = 0; k < n; ++k)
144+
{
145+
if (k % 2 == 0) nums[k] = arr[i--];
146+
else nums[k] = arr[j--];
147+
}
148+
}
149+
};
150+
```
151+
152+
```cpp
153+
class Solution {
154+
public:
155+
void wiggleSort(vector<int>& nums) {
156+
vector<int> bucket(5001);
157+
for (int& v : nums) ++bucket[v];
158+
int n = nums.size();
159+
int j = 5000;
160+
for (int i = 1; i < n; i += 2)
161+
{
162+
while (bucket[j] == 0) --j;
163+
nums[i] = j;
164+
--bucket[j];
165+
}
166+
for (int i = 0; i < n; i += 2)
167+
{
168+
while (bucket[j] == 0) --j;
169+
nums[i] = j;
170+
--bucket[j];
171+
}
172+
}
173+
};
174+
```
175+
176+
### **Go**
177+
178+
```go
179+
func wiggleSort(nums []int) {
180+
n := len(nums)
181+
arr := make([]int, n)
182+
copy(arr, nums)
183+
sort.Ints(arr)
184+
i, j := (n-1)>>1, n-1
185+
for k := 0; k < n; k++ {
186+
if k%2 == 0 {
187+
nums[k] = arr[i]
188+
i--
189+
} else {
190+
nums[k] = arr[j]
191+
j--
192+
}
193+
}
194+
}
195+
```
52196

197+
```go
198+
func wiggleSort(nums []int) {
199+
bucket := make([]int, 5001)
200+
for _, v := range nums {
201+
bucket[v]++
202+
}
203+
n, j := len(nums), 5000
204+
for i := 1; i < n; i += 2 {
205+
for bucket[j] == 0 {
206+
j--
207+
}
208+
nums[i] = j
209+
bucket[j]--
210+
}
211+
for i := 0; i < n; i += 2 {
212+
for bucket[j] == 0 {
213+
j--
214+
}
215+
nums[i] = j
216+
bucket[j]--
217+
}
218+
}
53219
```
54220

55221
### **...**
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
class Solution {
2+
public:
3+
void wiggleSort(vector<int>& nums) {
4+
vector<int> arr = nums;
5+
sort(arr.begin(), arr.end());
6+
int n = nums.size();
7+
int i = (n - 1) >> 1, j = n - 1;
8+
for (int k = 0; k < n; ++k)
9+
{
10+
if (k % 2 == 0) nums[k] = arr[i--];
11+
else nums[k] = arr[j--];
12+
}
13+
}
14+
};

0 commit comments

Comments
 (0)