File tree 4 files changed +119
-5
lines changed
solution/1800-1899/1854.Maximum Population Year
4 files changed +119
-5
lines changed Original file line number Diff line number Diff line change 38
38
<li><code>1950 <= birth<sub>i</sub> < death<sub>i</sub> <= 2050</code></li>
39
39
</ul >
40
40
41
-
42
41
## 解法
43
42
44
43
<!-- 这里可写通用的实现逻辑 -->
45
44
45
+ 差分数组实现。
46
+
47
+ 用 delta 数组记录每个人的出生和死亡年份。
48
+
49
+ 题目中起始年份为 1950,我们希望数组的起始下标对应起始年份,并且年份与数组下标一一对应,因此我们需要引入起始年份与数组起始下标之差 ` offset=1950 ` ,使得下标 i 对应 ` i+offset ` 年。
50
+
51
+ 遍历 logs 时,将每个人出生年份对应的变化量加上 1,同时将死亡年份对应的变化量减去 1。
52
+
53
+ 最后,遍历 delta 数组,可以求出每一年的人口数量并维护其最大值和对应的最小下标 res。遍历结束后,将最小下标加上 offset,即是所求的年份。
54
+
46
55
<!-- tabs:start -->
47
56
48
57
### ** Python3**
49
58
50
59
<!-- 这里可写当前语言的特殊实现逻辑 -->
51
60
52
61
``` python
53
-
62
+ class Solution :
63
+ def maximumPopulation (self , logs : List[List[int ]]) -> int :
64
+ offset = 1950
65
+ delta = [0 ] * 101
66
+ # 遍历每个人的出生和死亡年份
67
+ 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]
77
+ if mx < cur:
78
+ mx = cur
79
+ res = i
80
+ return res + offset
54
81
```
55
82
56
83
### ** Java**
57
84
58
85
<!-- 这里可写当前语言的特殊实现逻辑 -->
59
86
60
87
``` java
61
-
88
+ class Solution {
89
+ public int maximumPopulation (int [][] logs ) {
90
+ int offset = 1950 ;
91
+ int [] delta = new int [101 ];
92
+ // 遍历每个人的出生和死亡年份
93
+ for (int [] log : logs) {
94
+ // 出生年份人数+1
95
+ ++ delta[log[0 ] - offset];
96
+ // 死亡年份人数-1
97
+ -- delta[log[1 ] - offset];
98
+ }
99
+
100
+ // mx表示人口数量最大值,cur表示当前年份人口数量,res表示人口数量最大的年份-offset
101
+ int mx = 0 , cur = 0 , res = 0 ;
102
+ for (int i = 0 ; i < 101 ; ++ i) {
103
+ cur += delta[i];
104
+ if (mx < cur) {
105
+ mx = cur;
106
+ res = i;
107
+ }
108
+ }
109
+ return res + offset;
110
+ }
111
+ }
62
112
```
63
113
64
114
### ** ...**
Original file line number Diff line number Diff line change @@ -44,13 +44,44 @@ The earlier year between them is 1960.</pre>
44
44
### ** Python3**
45
45
46
46
``` python
47
-
47
+ class Solution :
48
+ def maximumPopulation (self , logs : List[List[int ]]) -> int :
49
+ offset = 1950
50
+ delta = [0 ] * 101
51
+ for birth, death in logs:
52
+ delta[birth - offset] += 1
53
+ delta[death - offset] -= 1
54
+ mx = cur = res = 0
55
+ for i in range (101 ):
56
+ cur += delta[i]
57
+ if mx < cur:
58
+ mx = cur
59
+ res = i
60
+ return res + offset
48
61
```
49
62
50
63
### ** Java**
51
64
52
65
``` java
53
-
66
+ class Solution {
67
+ public int maximumPopulation (int [][] logs ) {
68
+ int offset = 1950 ;
69
+ int [] delta = new int [101 ];
70
+ for (int [] log : logs) {
71
+ ++ delta[log[0 ] - offset];
72
+ -- delta[log[1 ] - offset];
73
+ }
74
+ int mx = 0 , cur = 0 , res = 0 ;
75
+ for (int i = 0 ; i < 101 ; ++ i) {
76
+ cur += delta[i];
77
+ if (mx < cur) {
78
+ mx = cur;
79
+ res = i;
80
+ }
81
+ }
82
+ return res + offset;
83
+ }
84
+ }
54
85
```
55
86
56
87
### ** ...**
Original file line number Diff line number Diff line change
1
+ class Solution {
2
+ public int maximumPopulation (int [][] logs ) {
3
+ int offset = 1950 ;
4
+ int [] delta = new int [101 ];
5
+ for (int [] log : logs ) {
6
+ ++delta [log [0 ] - offset ];
7
+ --delta [log [1 ] - offset ];
8
+ }
9
+ int mx = 0 , cur = 0 , res = 0 ;
10
+ for (int i = 0 ; i < 101 ; ++i ) {
11
+ cur += delta [i ];
12
+ if (mx < cur ) {
13
+ mx = cur ;
14
+ res = i ;
15
+ }
16
+ }
17
+ return res + offset ;
18
+ }
19
+ }
Original file line number Diff line number Diff line change
1
+ class Solution :
2
+ def maximumPopulation (self , logs : List [List [int ]]) -> int :
3
+ offset = 1950
4
+ delta = [0 ] * 101
5
+ for birth , death in logs :
6
+ delta [birth - offset ] += 1
7
+ delta [death - offset ] -= 1
8
+ mx = cur = res = 0
9
+ for i in range (101 ):
10
+ cur += delta [i ]
11
+ if mx < cur :
12
+ mx = cur
13
+ res = i
14
+ return res + offset
You can’t perform that action at this time.
0 commit comments