Skip to content

Commit 841c406

Browse files
committed
feat: add solutions to lc/lcof problems: No.0344,0539
1 parent cd0c144 commit 841c406

File tree

18 files changed

+511
-35
lines changed

18 files changed

+511
-35
lines changed

lcof2/剑指 Offer II 035. 最小时间差/README.md

+89-1
Original file line numberDiff line numberDiff line change
@@ -40,22 +40,110 @@
4040

4141
<!-- 这里可写通用的实现逻辑 -->
4242

43+
首先,遍历时间列表,将其转换为“分钟制”列表 `mins`,比如,对于时间点 `13:14`,将其转换为 `13 * 60 + 14`
44+
45+
接着将“分钟制”列表按升序排列,然后将此列表的最小时间 `mins[0]` 加上 `24 * 60` 追加至列表尾部,用于处理最大值、最小值的差值这种特殊情况。
46+
47+
最后遍历“分钟制”列表,找出相邻两个时间的最小值即可。
48+
4349
<!-- tabs:start -->
4450

4551
### **Python3**
4652

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

4955
```python
50-
56+
class Solution:
57+
def findMinDifference(self, timePoints: List[str]) -> int:
58+
if len(timePoints) > 24 * 60:
59+
return 0
60+
mins = sorted(int(t[:2]) * 60 + int(t[3:]) for t in timePoints)
61+
mins.append(mins[0] + 24 * 60)
62+
res = mins[-1]
63+
for i in range(1, len(mins)):
64+
res = min(res, mins[i] - mins[i - 1])
65+
return res
5166
```
5267

5368
### **Java**
5469

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

5772
```java
73+
class Solution {
74+
public int findMinDifference(List<String> timePoints) {
75+
if (timePoints.size() > 24 * 60) {
76+
return 0;
77+
}
78+
List<Integer> mins = new ArrayList<>();
79+
for (String t : timePoints) {
80+
String[] time = t.split(":");
81+
mins.add(Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]));
82+
}
83+
Collections.sort(mins);
84+
mins.add(mins.get(0) + 24 * 60);
85+
int res = 24 * 60;
86+
for (int i = 1; i < mins.size(); ++i) {
87+
res = Math.min(res, mins.get(i) - mins.get(i - 1));
88+
}
89+
return res;
90+
}
91+
}
92+
```
93+
94+
### **C++**
95+
96+
```cpp
97+
class Solution {
98+
public int findMinDifference(List<String> timePoints) {
99+
if (timePoints.size() > 24 * 60) {
100+
return 0;
101+
}
102+
List<Integer> mins = new ArrayList<>();
103+
for (String t : timePoints) {
104+
String[] time = t.split(":");
105+
mins.add(Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]));
106+
}
107+
Collections.sort(mins);
108+
mins.add(mins.get(0) + 24 * 60);
109+
int res = 24 * 60;
110+
for (int i = 1; i < mins.size(); ++i) {
111+
res = Math.min(res, mins.get(i) - mins.get(i - 1));
112+
}
113+
return res;
114+
}
115+
}
116+
```
58117
118+
### **Go**
119+
120+
```go
121+
func findMinDifference(timePoints []string) int {
122+
if len(timePoints) > 24*60 {
123+
return 0
124+
}
125+
var mins []int
126+
for _, t := range timePoints {
127+
time := strings.Split(t, ":")
128+
h, _ := strconv.Atoi(time[0])
129+
m, _ := strconv.Atoi(time[1])
130+
mins = append(mins, h*60+m)
131+
}
132+
sort.Ints(mins)
133+
mins = append(mins, mins[0]+24*60)
134+
res := 24 * 60
135+
for i := 1; i < len(mins); i++ {
136+
res = min(res, mins[i]-mins[i-1])
137+
}
138+
return res
139+
}
140+
141+
func min(a, b int) int {
142+
if a < b {
143+
return a
144+
}
145+
return b
146+
}
59147
```
60148

61149
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
int findMinDifference(vector<string> &timePoints) {
4+
if (timePoints.size() > 24 * 60)
5+
return 0;
6+
vector<int> mins;
7+
for (auto t : timePoints)
8+
mins.push_back(stoi(t.substr(0, 2)) * 60 + stoi(t.substr(3)));
9+
sort(mins.begin(), mins.end());
10+
mins.push_back(mins[0] + 24 * 60);
11+
int res = 24 * 60;
12+
for (int i = 1; i < mins.size(); ++i)
13+
res = min(res, mins[i] - mins[i - 1]);
14+
return res;
15+
}
16+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
func findMinDifference(timePoints []string) int {
2+
if len(timePoints) > 24*60 {
3+
return 0
4+
}
5+
var mins []int
6+
for _, t := range timePoints {
7+
time := strings.Split(t, ":")
8+
h, _ := strconv.Atoi(time[0])
9+
m, _ := strconv.Atoi(time[1])
10+
mins = append(mins, h*60+m)
11+
}
12+
sort.Ints(mins)
13+
mins = append(mins, mins[0]+24*60)
14+
res := 24 * 60
15+
for i := 1; i < len(mins); i++ {
16+
res = min(res, mins[i]-mins[i-1])
17+
}
18+
return res
19+
}
20+
21+
func min(a, b int) int {
22+
if a < b {
23+
return a
24+
}
25+
return b
26+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class Solution {
2+
public int findMinDifference(List<String> timePoints) {
3+
if (timePoints.size() > 24 * 60) {
4+
return 0;
5+
}
6+
List<Integer> mins = new ArrayList<>();
7+
for (String t : timePoints) {
8+
String[] time = t.split(":");
9+
mins.add(Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]));
10+
}
11+
Collections.sort(mins);
12+
mins.add(mins.get(0) + 24 * 60);
13+
int res = 24 * 60;
14+
for (int i = 1; i < mins.size(); ++i) {
15+
res = Math.min(res, mins.get(i) - mins.get(i - 1));
16+
}
17+
return res;
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
class Solution:
2+
def findMinDifference(self, timePoints: List[str]) -> int:
3+
if len(timePoints) > 24 * 60:
4+
return 0
5+
mins = sorted(int(t[:2]) * 60 + int(t[3:]) for t in timePoints)
6+
mins.append(mins[0] + 24 * 60)
7+
res = mins[-1]
8+
for i in range(1, len(mins)):
9+
res = min(res, mins[i] - mins[i - 1])
10+
return res

solution/0300-0399/0344.Reverse String/README.md

+37-6
Original file line numberDiff line numberDiff line change
@@ -52,20 +52,51 @@ class Solution:
5252
```java
5353
class Solution {
5454
public void reverseString(char[] s) {
55-
int n;
56-
if (s == null || (n = s.length) < 2) return;
57-
int i = 0, j = n - 1;
58-
while (i < j) {
55+
for (int i = 0, j = s.length - 1; i < j; ++i, --j) {
5956
char t = s[i];
6057
s[i] = s[j];
6158
s[j] = t;
62-
++i;
63-
--j;
6459
}
6560
}
6661
}
6762
```
6863

64+
### **C++**
65+
66+
```cpp
67+
class Solution {
68+
public:
69+
void reverseString(vector<char>& s) {
70+
for (int i = 0, j = s.size() - 1; i < j; ++i, --j)
71+
swap(s[i], s[j]);
72+
}
73+
};
74+
```
75+
76+
### **Go**
77+
78+
```go
79+
func reverseString(s []byte) {
80+
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
81+
s[i], s[j] = s[j], s[i]
82+
}
83+
}
84+
```
85+
86+
### **JavaScript**
87+
88+
```js
89+
/**
90+
* @param {character[]} s
91+
* @return {void} Do not return anything, modify s in-place instead.
92+
*/
93+
var reverseString = function(s) {
94+
for (let i = 0, j = s.length - 1; i < j; ++i, --j) {
95+
[s[i], s[j]] = [s[j], s[i]];
96+
}
97+
};
98+
```
99+
69100
### **...**
70101

71102
```

solution/0300-0399/0344.Reverse String/README_EN.md

+37-6
Original file line numberDiff line numberDiff line change
@@ -46,20 +46,51 @@ class Solution:
4646
```java
4747
class Solution {
4848
public void reverseString(char[] s) {
49-
int n;
50-
if (s == null || (n = s.length) < 2) return;
51-
int i = 0, j = n - 1;
52-
while (i < j) {
49+
for (int i = 0, j = s.length - 1; i < j; ++i, --j) {
5350
char t = s[i];
5451
s[i] = s[j];
5552
s[j] = t;
56-
++i;
57-
--j;
5853
}
5954
}
6055
}
6156
```
6257

58+
### **C++**
59+
60+
```cpp
61+
class Solution {
62+
public:
63+
void reverseString(vector<char>& s) {
64+
for (int i = 0, j = s.size() - 1; i < j; ++i, --j)
65+
swap(s[i], s[j]);
66+
}
67+
};
68+
```
69+
70+
### **Go**
71+
72+
```go
73+
func reverseString(s []byte) {
74+
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
75+
s[i], s[j] = s[j], s[i]
76+
}
77+
}
78+
```
79+
80+
### **JavaScript**
81+
82+
```js
83+
/**
84+
* @param {character[]} s
85+
* @return {void} Do not return anything, modify s in-place instead.
86+
*/
87+
var reverseString = function(s) {
88+
for (let i = 0, j = s.length - 1; i < j; ++i, --j) {
89+
[s[i], s[j]] = [s[j], s[i]];
90+
}
91+
};
92+
```
93+
6394
### **...**
6495

6596
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
class Solution {
2+
public:
3+
void reverseString(vector<char>& s) {
4+
for (int i = 0, j = s.size() - 1; i < j; ++i, --j)
5+
swap(s[i], s[j]);
6+
}
7+
};
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
func reverseString(s []byte) {
2+
for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 {
3+
s[i], s[j] = s[j], s[i]
4+
}
5+
}
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
11
class Solution {
22
public void reverseString(char[] s) {
3-
int n;
4-
if (s == null || (n = s.length) < 2) return;
5-
int i = 0, j = n - 1;
6-
while (i < j) {
3+
for (int i = 0, j = s.length - 1; i < j; ++i, --j) {
74
char t = s[i];
85
s[i] = s[j];
96
s[j] = t;
10-
++i;
11-
--j;
127
}
138
}
149
}
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1-
const reverseString = function (s) {
2-
return s.split("").reverse().join("");
3-
};
1+
/**
2+
* @param {character[]} s
3+
* @return {void} Do not return anything, modify s in-place instead.
4+
*/
5+
var reverseString = function(s) {
6+
for (let i = 0, j = s.length - 1; i < j; ++i, --j) {
7+
[s[i], s[j]] = [s[j], s[i]];
8+
}
9+
};
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,6 @@
11
class Solution:
2-
def generatePossibleNextMoves(self, s: str) -> List[str]:
3-
if not s or len(s) < 2:
4-
return []
5-
n = len(s)
6-
res = []
7-
for i in range(n - 1):
8-
if s[i] == '+' and s[i + 1] == '+':
9-
res.append(s[:i] + "--" + s[i + 2:])
10-
return res
2+
def reverseString(self, s: List[str]) -> None:
3+
"""
4+
Do not return anything, modify s in-place instead.
5+
"""
6+
s[:] = s[::-1]

0 commit comments

Comments
 (0)