File tree Expand file tree Collapse file tree 12 files changed +266
-83
lines changed
lcci/10.11.Peaks and Valleys
0862.Shortest Subarray with Sum at Least K Expand file tree Collapse file tree 12 files changed +266
-83
lines changed Original file line number Diff line number Diff line change 19
19
20
20
<!-- 这里可写通用的实现逻辑 -->
21
21
22
+ ** 方法一:排序**
23
+
24
+ 我们先对数组进行排序,然后遍历数组,将偶数下标的元素与后一个元素交换即可。
25
+
26
+ 时间复杂度 $O(n \times \log n)$,空间复杂度 $O(\log n)$。其中 $n$ 是数组的长度。
27
+
22
28
<!-- tabs:start -->
23
29
24
30
### ** Python3**
25
31
26
32
<!-- 这里可写当前语言的特殊实现逻辑 -->
27
33
28
34
``` 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 ]
30
40
```
31
41
32
42
### ** Java**
33
43
34
44
<!-- 这里可写当前语言的特殊实现逻辑 -->
35
45
36
46
``` 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
+ ```
37
85
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
+ }
38
99
```
39
100
40
101
### ** ...**
Original file line number Diff line number Diff line change 25
25
### ** Python3**
26
26
27
27
``` 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 ]
29
33
```
30
34
31
35
### ** Java**
32
36
33
37
``` 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
+ ```
34
76
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
+ }
35
90
```
36
91
37
92
### ** ...**
Original file line number Diff line number Diff line change
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
+ };
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change
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 ]
Original file line number Diff line number Diff line change
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
+ }
Original file line number Diff line number Diff line change 55
55
56
56
** 方法一:贪心 + 模拟**
57
57
58
- 从前往后遍历账单数组 ` bills ` ,如果当前账单是 5 美元,那么直接收下即可;如果当前账单是 10 美元,那么需要找零 5 美元;如果当前账单是 20 美元,那么需要找零 15 美元,此时有两种找零方式:找零 1 张 10 美元 + 1 张 5 美元;找零 3 张 5 美元。如果找零失败,直接返回 ` false ` 。
58
+ 我们从前往后遍历账单数组 $ bills$,对于当前遍历到的账单:
59
59
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$ 的长度。
61
68
62
69
<!-- tabs:start -->
63
70
@@ -95,17 +102,19 @@ class Solution {
95
102
public boolean lemonadeChange (int [] bills ) {
96
103
int five = 0 , ten = 0 ;
97
104
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;
106
109
-- five;
107
- } else {
108
- five -= 3 ;
110
+ }
111
+ case 20 - > {
112
+ if (ten > 0 ) {
113
+ -- ten;
114
+ -- five;
115
+ } else {
116
+ five -= 3 ;
117
+ }
109
118
}
110
119
}
111
120
if (five < 0 ) {
@@ -123,20 +132,24 @@ class Solution {
123
132
class Solution {
124
133
public:
125
134
bool lemonadeChange(vector<int >& bills) {
126
- int five = 0, ten = 0 ;
135
+ int five = 0, ten = 10 ;
127
136
for (int v : bills) {
128
- if (v == 5)
137
+ if (v == 5) {
129
138
++five;
130
- else if (v == 10) {
139
+ } else if (v == 10) {
131
140
++ten;
132
141
--five;
133
142
} else {
134
- if (ten)
135
- --ten, --five;
136
- else
143
+ if (ten) {
144
+ --ten;
145
+ --five;
146
+ } else {
137
147
five -= 3;
148
+ }
149
+ }
150
+ if (five < 0) {
151
+ return false;
138
152
}
139
- if (five < 0) return false;
140
153
}
141
154
return true;
142
155
}
Original file line number Diff line number Diff line change @@ -77,17 +77,19 @@ class Solution {
77
77
public boolean lemonadeChange (int [] bills ) {
78
78
int five = 0 , ten = 0 ;
79
79
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;
88
84
-- five;
89
- } else {
90
- five -= 3 ;
85
+ }
86
+ case 20 - > {
87
+ if (ten > 0 ) {
88
+ -- ten;
89
+ -- five;
90
+ } else {
91
+ five -= 3 ;
92
+ }
91
93
}
92
94
}
93
95
if (five < 0 ) {
@@ -105,20 +107,24 @@ class Solution {
105
107
class Solution {
106
108
public:
107
109
bool lemonadeChange(vector<int >& bills) {
108
- int five = 0, ten = 0 ;
110
+ int five = 0, ten = 10 ;
109
111
for (int v : bills) {
110
- if (v == 5)
112
+ if (v == 5) {
111
113
++five;
112
- else if (v == 10) {
114
+ } else if (v == 10) {
113
115
++ten;
114
116
--five;
115
117
} else {
116
- if (ten)
117
- --ten, --five;
118
- else
118
+ if (ten) {
119
+ --ten;
120
+ --five;
121
+ } else {
119
122
five -= 3;
123
+ }
124
+ }
125
+ if (five < 0) {
126
+ return false;
120
127
}
121
- if (five < 0) return false;
122
128
}
123
129
return true;
124
130
}
Original file line number Diff line number Diff line change 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
+ }
21
25
};
You can’t perform that action at this time.
0 commit comments