Skip to content

Commit b209088

Browse files
committed
feat: update solutions to lc problem: No.0414.Third Maximum Number
1 parent fdec232 commit b209088

File tree

6 files changed

+63
-40
lines changed

6 files changed

+63
-40
lines changed

solution/0400-0499/0414.Third Maximum Number/README.md

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,22 @@
4646

4747
<p><strong>进阶:</strong>你能设计一个时间复杂度 <code>O(n)</code> 的解决方案吗?</p>
4848

49-
5049
## 解法
5150

5251
<!-- 这里可写通用的实现逻辑 -->
5352

53+
定义 m1, m2, m3 分别表示数组的第 1 大、第 2 大、第 3 大的数,初始化为一个足够小的数。
54+
55+
遍历数组每个元素 num:
56+
57+
- 若 num 与前三大数中的某一个相等,直接跳过,因为我们要找的是在所有不同数字中的第三大。
58+
- 若 num 比 m1 大,说明找到了一个最大的数,此时我们要把 num 赋值给 m1,即 m1 = num,但在做赋值操作之前,我们要先把旧值赋给 m2,依次类推,即:`m3, m2, m1 = m2, m1, num`
59+
- 对于 num 比 m2、m3 大的情况,也按照上面的赋值方法进行处理。
60+
61+
遍历结束,判断 m3 这个值是否在初始化之后改变过,若是,说明找到了第 3 大数,返回 m3,否则返回 m1。
62+
63+
本方法时间复杂度 O(n),空间复杂度 O(1)。
64+
5465
<!-- tabs:start -->
5566

5667
### **Python3**
@@ -62,15 +73,15 @@ class Solution:
6273
def thirdMax(self, nums: List[int]) -> int:
6374
m1 = m2 = m3 = float('-inf')
6475
for num in nums:
65-
if num == m1 or num == m2 or num == m3:
76+
if num in [m1, m2, m3]:
6677
continue
6778
if num > m1:
6879
m3, m2, m1 = m2, m1, num
6980
elif num > m2:
7081
m3, m2 = m2, num
7182
elif num > m3:
7283
m3 = num
73-
return m1 if m3 == float('-inf') else m3
84+
return m3 if m3 != float('-inf') else m1
7485
```
7586

7687
### **Java**
@@ -98,7 +109,7 @@ class Solution {
98109
m3 = num;
99110
}
100111
}
101-
return (int) (m3 == Long.MIN_VALUE ? m1 : m3);
112+
return (int) (m3 != Long.MIN_VALUE ? m3 : m1);
102113
}
103114
}
104115
```
@@ -110,29 +121,33 @@ class Solution {
110121
public:
111122
int thirdMax(vector<int>& nums) {
112123
long m1 = LONG_MIN, m2 = LONG_MIN, m3 = LONG_MIN;
113-
for (int& num : nums) {
124+
for (int num : nums)
125+
{
114126
if (num == m1 || num == m2 || num == m3) continue;
115-
if (num > m1) {
127+
if (num > m1)
128+
{
116129
m3 = m2;
117130
m2 = m1;
118131
m1 = num;
119-
} else if (num > m2) {
132+
}
133+
else if (num > m2)
134+
{
120135
m3 = m2;
121136
m2 = num;
122-
} else if (num > m3) {
137+
}
138+
else if (num > m3)
139+
{
123140
m3 = num;
124141
}
125142
}
126-
return (int) (m3 == LONG_MIN ? m1 : m3);
143+
return (int) (m3 != LONG_MIN ? m3 : m1);
127144
}
128145
};
129146
```
130147
131148
### **Go**
132149
133150
```go
134-
import "math"
135-
136151
func thirdMax(nums []int) int {
137152
m1, m2, m3 := math.MinInt64, math.MinInt64, math.MinInt64
138153
for _, num := range nums {
@@ -147,10 +162,10 @@ func thirdMax(nums []int) int {
147162
m3 = num
148163
}
149164
}
150-
if m3 == math.MinInt64 {
151-
return m1
165+
if m3 != math.MinInt64 {
166+
return m3
152167
}
153-
return m3
168+
return m1
154169
}
155170
```
156171

solution/0400-0499/0414.Third Maximum Number/README_EN.md

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,15 @@ class Solution:
5454
def thirdMax(self, nums: List[int]) -> int:
5555
m1 = m2 = m3 = float('-inf')
5656
for num in nums:
57-
if num == m1 or num == m2 or num == m3:
57+
if num in [m1, m2, m3]:
5858
continue
5959
if num > m1:
6060
m3, m2, m1 = m2, m1, num
6161
elif num > m2:
6262
m3, m2 = m2, num
6363
elif num > m3:
6464
m3 = num
65-
return m1 if m3 == float('-inf') else m3
65+
return m3 if m3 != float('-inf') else m1
6666
```
6767

6868
### **Java**
@@ -88,7 +88,7 @@ class Solution {
8888
m3 = num;
8989
}
9090
}
91-
return (int) (m3 == Long.MIN_VALUE ? m1 : m3);
91+
return (int) (m3 != Long.MIN_VALUE ? m3 : m1);
9292
}
9393
}
9494
```
@@ -100,29 +100,33 @@ class Solution {
100100
public:
101101
int thirdMax(vector<int>& nums) {
102102
long m1 = LONG_MIN, m2 = LONG_MIN, m3 = LONG_MIN;
103-
for (int& num : nums) {
103+
for (int num : nums)
104+
{
104105
if (num == m1 || num == m2 || num == m3) continue;
105-
if (num > m1) {
106+
if (num > m1)
107+
{
106108
m3 = m2;
107109
m2 = m1;
108110
m1 = num;
109-
} else if (num > m2) {
111+
}
112+
else if (num > m2)
113+
{
110114
m3 = m2;
111115
m2 = num;
112-
} else if (num > m3) {
116+
}
117+
else if (num > m3)
118+
{
113119
m3 = num;
114120
}
115121
}
116-
return (int) (m3 == LONG_MIN ? m1 : m3);
122+
return (int) (m3 != LONG_MIN ? m3 : m1);
117123
}
118124
};
119125
```
120126
121127
### **Go**
122128
123129
```go
124-
import "math"
125-
126130
func thirdMax(nums []int) int {
127131
m1, m2, m3 := math.MinInt64, math.MinInt64, math.MinInt64
128132
for _, num := range nums {
@@ -137,10 +141,10 @@ func thirdMax(nums []int) int {
137141
m3 = num
138142
}
139143
}
140-
if m3 == math.MinInt64 {
141-
return m1
144+
if m3 != math.MinInt64 {
145+
return m3
142146
}
143-
return m3
147+
return m1
144148
}
145149
```
146150

solution/0400-0499/0414.Third Maximum Number/Solution.cpp

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,25 @@ class Solution {
22
public:
33
int thirdMax(vector<int>& nums) {
44
long m1 = LONG_MIN, m2 = LONG_MIN, m3 = LONG_MIN;
5-
for (int& num : nums) {
5+
for (int num : nums)
6+
{
67
if (num == m1 || num == m2 || num == m3) continue;
7-
if (num > m1) {
8+
if (num > m1)
9+
{
810
m3 = m2;
911
m2 = m1;
1012
m1 = num;
11-
} else if (num > m2) {
13+
}
14+
else if (num > m2)
15+
{
1216
m3 = m2;
1317
m2 = num;
14-
} else if (num > m3) {
18+
}
19+
else if (num > m3)
20+
{
1521
m3 = num;
1622
}
1723
}
18-
return (int) (m3 == LONG_MIN ? m1 : m3);
24+
return (int) (m3 != LONG_MIN ? m3 : m1);
1925
}
2026
};

solution/0400-0499/0414.Third Maximum Number/Solution.go

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
import "math"
2-
31
func thirdMax(nums []int) int {
42
m1, m2, m3 := math.MinInt64, math.MinInt64, math.MinInt64
53
for _, num := range nums {
@@ -14,8 +12,8 @@ func thirdMax(nums []int) int {
1412
m3 = num
1513
}
1614
}
17-
if m3 == math.MinInt64 {
18-
return m1
15+
if m3 != math.MinInt64 {
16+
return m3
1917
}
20-
return m3
18+
return m1
2119
}

solution/0400-0499/0414.Third Maximum Number/Solution.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,6 @@ public int thirdMax(int[] nums) {
1818
m3 = num;
1919
}
2020
}
21-
return (int) (m3 == Long.MIN_VALUE ? m1 : m3);
21+
return (int) (m3 != Long.MIN_VALUE ? m3 : m1);
2222
}
2323
}

solution/0400-0499/0414.Third Maximum Number/Solution.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ class Solution:
22
def thirdMax(self, nums: List[int]) -> int:
33
m1 = m2 = m3 = float('-inf')
44
for num in nums:
5-
if num == m1 or num == m2 or num == m3:
5+
if num in [m1, m2, m3]:
66
continue
77
if num > m1:
88
m3, m2, m1 = m2, m1, num
99
elif num > m2:
1010
m3, m2 = m2, num
1111
elif num > m3:
1212
m3 = num
13-
return m1 if m3 == float('-inf') else m3
13+
return m3 if m3 != float('-inf') else m1

0 commit comments

Comments
 (0)