Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

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 ==m1ornum==m2ornum==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)

AltStyle によって変換されたページ (->オリジナル) /