44
44
45
45
差分数组实现。
46
46
47
- 用 delta 数组记录每个人的出生和死亡年份。
48
-
49
- 题目中起始年份为 1950,我们希望数组的起始下标对应起始年份,并且年份与数组下标一一对应,因此我们需要引入起始年份与数组起始下标之差 ` offset=1950 ` ,使得下标 i 对应 ` i+offset ` 年。
50
-
51
- 遍历 logs 时,将每个人出生年份对应的变化量加上 1,同时将死亡年份对应的变化量减去 1。
52
-
53
- 最后,遍历 delta 数组,可以求出每一年的人口数量并维护其最大值和对应的最小下标 res。遍历结束后,将最小下标加上 offset,即是所求的年份。
54
-
55
47
<!-- tabs:start -->
56
48
57
49
### ** Python3**
61
53
``` python
62
54
class Solution :
63
55
def maximumPopulation (self , logs : List[List[int ]]) -> int :
64
- offset = 1950
65
- delta = [0 ] * 101
66
- # 遍历每个人的出生和死亡年份
56
+ delta = [0 ] * 2055
67
57
for birth, death in logs:
68
- # 出生年份人数+1
69
- delta[birth - offset] += 1
70
- # 死亡年份人数-1
71
- delta[death - offset] -= 1
72
-
73
- # mx表示人口数量最大值,cur表示当前年份人口数量,res表示人口数量最大的年份-offset
74
- mx = cur = res = 0
75
- for i in range (101 ):
76
- cur += delta[i]
58
+ delta[birth] += 1
59
+ delta[death] -= 1
60
+
61
+ mx = res = cur = 0
62
+ for i, v in enumerate (delta):
63
+ cur += v
77
64
if mx < cur:
78
65
mx = cur
79
66
res = i
80
- return res + offset
67
+ return res
81
68
```
82
69
83
70
### ** Java**
@@ -87,26 +74,20 @@ class Solution:
87
74
``` java
88
75
class Solution {
89
76
public int maximumPopulation (int [][] logs ) {
90
- int offset = 1950 ;
91
- int [] delta = new int [101 ];
92
- // 遍历每个人的出生和死亡年份
77
+ int [] delta = new int [2055 ];
93
78
for (int [] log : logs) {
94
- // 出生年份人数+1
95
- ++ delta[log[0 ] - offset];
96
- // 死亡年份人数-1
97
- -- delta[log[1 ] - offset];
79
+ ++ delta[log[0 ]];
80
+ -- delta[log[1 ]];
98
81
}
99
-
100
- // mx表示人口数量最大值,cur表示当前年份人口数量,res表示人口数量最大的年份-offset
101
- int mx = 0 , cur = 0 , res = 0 ;
102
- for (int i = 0 ; i < 101 ; ++ i) {
82
+ int res = 0 , mx = 0 , cur = 0 ;
83
+ for (int i = 0 ; i < delta. length; ++ i) {
103
84
cur += delta[i];
104
- if (mx < cur ) {
85
+ if (cur > mx ) {
105
86
mx = cur;
106
87
res = i;
107
88
}
108
89
}
109
- return res + offset ;
90
+ return res;
110
91
}
111
92
}
112
93
```
@@ -140,6 +121,53 @@ var maximumPopulation = function(logs) {
140
121
};
141
122
```
142
123
124
+ ### ** C++**
125
+
126
+ ``` cpp
127
+ class Solution {
128
+ public:
129
+ int maximumPopulation(vector<vector<int >>& logs) {
130
+ vector<int > delta(101, 0);
131
+ int offset = 1950;
132
+ for (auto log : logs) {
133
+ ++delta[ log[ 0] - offset] ;
134
+ --delta[ log[ 1] - offset] ;
135
+ }
136
+ int res = 0, mx = 0, cur = 0;
137
+ for (int i = 0; i < delta.size(); ++i) {
138
+ cur += delta[ i] ;
139
+ if (cur > mx) {
140
+ mx = cur;
141
+ res = i;
142
+ }
143
+ }
144
+ return res + offset;
145
+ }
146
+ };
147
+ ```
148
+
149
+ ### **Go**
150
+
151
+ ```go
152
+ func maximumPopulation(logs [][]int) int {
153
+ delta := make([]int, 101)
154
+ offset := 1950
155
+ for _, log := range logs {
156
+ delta[log[0]-offset]++
157
+ delta[log[1]-offset]--
158
+ }
159
+ res, mx, cur := 0, 0, 0
160
+ for i := 0; i < len(delta); i++ {
161
+ cur += delta[i]
162
+ if cur > mx {
163
+ mx = cur
164
+ res = i
165
+ }
166
+ }
167
+ return res + offset
168
+ }
169
+ ```
170
+
143
171
### ** ...**
144
172
145
173
```
0 commit comments