Skip to content

Commit f0dbaa2

Browse files
authored
feat: add solutions to lcci problem: No.10.11 (#1267)
No.10.11.Peaks and Valleys
1 parent e795782 commit f0dbaa2

File tree

12 files changed

+266
-83
lines changed

12 files changed

+266
-83
lines changed

lcci/10.11.Peaks and Valleys/README.md

Lines changed: 62 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,83 @@
1919

2020
<!-- 这里可写通用的实现逻辑 -->
2121

22+
**方法一:排序**
23+
24+
我们先对数组进行排序,然后遍历数组,将偶数下标的元素与后一个元素交换即可。
25+
26+
时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 是数组的长度。
27+
2228
<!-- tabs:start -->
2329

2430
### **Python3**
2531

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

2834
```python
29-
35+
class Solution:
36+
def wiggleSort(self, nums: List[int]) -> None:
37+
nums.sort()
38+
for i in range(0, len(nums), 2):
39+
nums[i : i + 2] = nums[i : i + 2][::-1]
3040
```
3141

3242
### **Java**
3343

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

3646
```java
47+
class Solution {
48+
public void wiggleSort(int[] nums) {
49+
Arrays.sort(nums);
50+
int n = nums.length;
51+
for (int i = 0; i < n - 1; i += 2) {
52+
int t = nums[i];
53+
nums[i] = nums[i + 1];
54+
nums[i + 1] = t;
55+
}
56+
}
57+
}
58+
```
59+
60+
### **C++**
61+
62+
```cpp
63+
class Solution {
64+
public:
65+
void wiggleSort(vector<int>& nums) {
66+
sort(nums.begin(), nums.end());
67+
int n = nums.size();
68+
for (int i = 0; i < n - 1; i += 2) {
69+
swap(nums[i], nums[i + 1]);
70+
}
71+
}
72+
};
73+
```
74+
75+
### **Go**
76+
77+
```go
78+
func wiggleSort(nums []int) {
79+
sort.Ints(nums)
80+
for i := 0; i < len(nums)-1; i += 2 {
81+
nums[i], nums[i+1] = nums[i+1], nums[i]
82+
}
83+
}
84+
```
3785

86+
### **TypeScript**
87+
88+
```ts
89+
/**
90+
Do not return anything, modify nums in-place instead.
91+
*/
92+
function wiggleSort(nums: number[]): void {
93+
nums.sort((a, b) => a - b);
94+
const n = nums.length;
95+
for (let i = 0; i < n - 1; i += 2) {
96+
[nums[i], nums[i + 1]] = [nums[i + 1], nums[i]];
97+
}
98+
}
3899
```
39100

40101
### **...**

lcci/10.11.Peaks and Valleys/README_EN.md

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,68 @@
2525
### **Python3**
2626

2727
```python
28-
28+
class Solution:
29+
def wiggleSort(self, nums: List[int]) -> None:
30+
nums.sort()
31+
for i in range(0, len(nums), 2):
32+
nums[i : i + 2] = nums[i : i + 2][::-1]
2933
```
3034

3135
### **Java**
3236

3337
```java
38+
class Solution {
39+
public void wiggleSort(int[] nums) {
40+
Arrays.sort(nums);
41+
int n = nums.length;
42+
for (int i = 0; i < n - 1; i += 2) {
43+
int t = nums[i];
44+
nums[i] = nums[i + 1];
45+
nums[i + 1] = t;
46+
}
47+
}
48+
}
49+
```
50+
51+
### **C++**
52+
53+
```cpp
54+
class Solution {
55+
public:
56+
void wiggleSort(vector<int>& nums) {
57+
sort(nums.begin(), nums.end());
58+
int n = nums.size();
59+
for (int i = 0; i < n - 1; i += 2) {
60+
swap(nums[i], nums[i + 1]);
61+
}
62+
}
63+
};
64+
```
65+
66+
### **Go**
67+
68+
```go
69+
func wiggleSort(nums []int) {
70+
sort.Ints(nums)
71+
for i := 0; i < len(nums)-1; i += 2 {
72+
nums[i], nums[i+1] = nums[i+1], nums[i]
73+
}
74+
}
75+
```
3476

77+
### **TypeScript**
78+
79+
```ts
80+
/**
81+
Do not return anything, modify nums in-place instead.
82+
*/
83+
function wiggleSort(nums: number[]): void {
84+
nums.sort((a, b) => a - b);
85+
const n = nums.length;
86+
for (let i = 0; i < n - 1; i += 2) {
87+
[nums[i], nums[i + 1]] = [nums[i + 1], nums[i]];
88+
}
89+
}
3590
```
3691

3792
### **...**
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution {
2+
public:
3+
void wiggleSort(vector<int>& nums) {
4+
sort(nums.begin(), nums.end());
5+
int n = nums.size();
6+
for (int i = 0; i < n - 1; i += 2) {
7+
swap(nums[i], nums[i + 1]);
8+
}
9+
}
10+
};
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
func wiggleSort(nums []int) {
2+
sort.Ints(nums)
3+
for i := 0; i < len(nums)-1; i += 2 {
4+
nums[i], nums[i+1] = nums[i+1], nums[i]
5+
}
6+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
class Solution {
2+
public void wiggleSort(int[] nums) {
3+
Arrays.sort(nums);
4+
int n = nums.length;
5+
for (int i = 0; i < n - 1; i += 2) {
6+
int t = nums[i];
7+
nums[i] = nums[i + 1];
8+
nums[i + 1] = t;
9+
}
10+
}
11+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
class Solution:
2+
def wiggleSort(self, nums: List[int]) -> None:
3+
nums.sort()
4+
for i in range(0, len(nums), 2):
5+
nums[i : i + 2] = nums[i : i + 2][::-1]
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/**
2+
Do not return anything, modify nums in-place instead.
3+
*/
4+
function wiggleSort(nums: number[]): void {
5+
nums.sort((a, b) => a - b);
6+
const n = nums.length;
7+
for (let i = 0; i < n - 1; i += 2) {
8+
[nums[i], nums[i + 1]] = [nums[i + 1], nums[i]];
9+
}
10+
}

solution/0800-0899/0860.Lemonade Change/README.md

Lines changed: 32 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -55,9 +55,16 @@
5555

5656
**方法一:贪心 + 模拟**
5757

58-
从前往后遍历账单数组 `bills`,如果当前账单是 5 美元,那么直接收下即可;如果当前账单是 10 美元,那么需要找零 5 美元;如果当前账单是 20 美元,那么需要找零 15 美元,此时有两种找零方式:找零 1 张 10 美元 + 1 张 5 美元;找零 3 张 5 美元。如果找零失败,直接返回 `false`
58+
我们从前往后遍历账单数组 $bills$,对于当前遍历到的账单:
5959

60-
时间复杂度 O(n),空间复杂度 O(1)。其中 n 为账单数组 `bills` 的长度。
60+
- 如果是 $5$ 美元,那么直接收下即可;
61+
- 如果是 $10$ 美元,那么需要找零 $5$ 美元;
62+
- 如果是 $20$ 美元,那么需要找零 $15$ 美元,此时有两种找零方式:找零 $1$ 张 $10$ 美元 + $1$ 张 $5$ 美元;找零 $3$ 张 $5$ 美元。我们优先用第一种找零方式,如果没有足够的 $10$ 美元,那么用第二种方式;
63+
- 如果发现 $5$ 美元的数量不够,直接返回 `false`
64+
65+
遍历结束,说明我们没有遇到无法找零的情况,返回 `true` 即可。
66+
67+
时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为账单数组 $bills$ 的长度。
6168

6269
<!-- tabs:start -->
6370

@@ -95,17 +102,19 @@ class Solution {
95102
public boolean lemonadeChange(int[] bills) {
96103
int five = 0, ten = 0;
97104
for (int v : bills) {
98-
if (v == 5) {
99-
++five;
100-
} else if (v == 10) {
101-
++ten;
102-
--five;
103-
} else {
104-
if (ten > 0) {
105-
--ten;
105+
switch (v) {
106+
case 5 -> ++five;
107+
case 10 -> {
108+
++ten;
106109
--five;
107-
} else {
108-
five -= 3;
110+
}
111+
case 20 -> {
112+
if (ten > 0) {
113+
--ten;
114+
--five;
115+
} else {
116+
five -= 3;
117+
}
109118
}
110119
}
111120
if (five < 0) {
@@ -123,20 +132,24 @@ class Solution {
123132
class Solution {
124133
public:
125134
bool lemonadeChange(vector<int>& bills) {
126-
int five = 0, ten = 0;
135+
int five = 0, ten = 10;
127136
for (int v : bills) {
128-
if (v == 5)
137+
if (v == 5) {
129138
++five;
130-
else if (v == 10) {
139+
} else if (v == 10) {
131140
++ten;
132141
--five;
133142
} else {
134-
if (ten)
135-
--ten, --five;
136-
else
143+
if (ten) {
144+
--ten;
145+
--five;
146+
} else {
137147
five -= 3;
148+
}
149+
}
150+
if (five < 0) {
151+
return false;
138152
}
139-
if (five < 0) return false;
140153
}
141154
return true;
142155
}

solution/0800-0899/0860.Lemonade Change/README_EN.md

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -77,17 +77,19 @@ class Solution {
7777
public boolean lemonadeChange(int[] bills) {
7878
int five = 0, ten = 0;
7979
for (int v : bills) {
80-
if (v == 5) {
81-
++five;
82-
} else if (v == 10) {
83-
++ten;
84-
--five;
85-
} else {
86-
if (ten > 0) {
87-
--ten;
80+
switch (v) {
81+
case 5 -> ++five;
82+
case 10 -> {
83+
++ten;
8884
--five;
89-
} else {
90-
five -= 3;
85+
}
86+
case 20 -> {
87+
if (ten > 0) {
88+
--ten;
89+
--five;
90+
} else {
91+
five -= 3;
92+
}
9193
}
9294
}
9395
if (five < 0) {
@@ -105,20 +107,24 @@ class Solution {
105107
class Solution {
106108
public:
107109
bool lemonadeChange(vector<int>& bills) {
108-
int five = 0, ten = 0;
110+
int five = 0, ten = 10;
109111
for (int v : bills) {
110-
if (v == 5)
112+
if (v == 5) {
111113
++five;
112-
else if (v == 10) {
114+
} else if (v == 10) {
113115
++ten;
114116
--five;
115117
} else {
116-
if (ten)
117-
--ten, --five;
118-
else
118+
if (ten) {
119+
--ten;
120+
--five;
121+
} else {
119122
five -= 3;
123+
}
124+
}
125+
if (five < 0) {
126+
return false;
120127
}
121-
if (five < 0) return false;
122128
}
123129
return true;
124130
}
Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,25 @@
1-
class Solution {
2-
public:
3-
bool lemonadeChange(vector<int>& bills) {
4-
int five = 0, ten = 0;
5-
for (int v : bills) {
6-
if (v == 5)
7-
++five;
8-
else if (v == 10) {
9-
++ten;
10-
--five;
11-
} else {
12-
if (ten)
13-
--ten, --five;
14-
else
15-
five -= 3;
16-
}
17-
if (five < 0) return false;
18-
}
19-
return true;
20-
}
1+
class Solution {
2+
public:
3+
bool lemonadeChange(vector<int>& bills) {
4+
int five = 0, ten = 10;
5+
for (int v : bills) {
6+
if (v == 5) {
7+
++five;
8+
} else if (v == 10) {
9+
++ten;
10+
--five;
11+
} else {
12+
if (ten) {
13+
--ten;
14+
--five;
15+
} else {
16+
five -= 3;
17+
}
18+
}
19+
if (five < 0) {
20+
return false;
21+
}
22+
}
23+
return true;
24+
}
2125
};

0 commit comments

Comments
 (0)