Skip to content

Commit a615012

Browse files
committed
feat: add solutions to lc problem: No.1854
No.1854.Maximum Population Year
1 parent afd72a6 commit a615012

File tree

10 files changed

+295
-211
lines changed

10 files changed

+295
-211
lines changed

solution/1800-1899/1850.Minimum Adjacent Swaps to Reach the Kth Smallest Number/README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,15 +12,13 @@
1212

1313
<ul>
1414
<li>例如,<code>num = "5489355142"</code> :
15-
1615
<ul>
1716
<li>第 1 个最小妙数是 <code>"5489355214"</code></li>
1817
<li>第 2 个最小妙数是 <code>"5489355241"</code></li>
1918
<li>第 3 个最小妙数是 <code>"5489355412"</code></li>
2019
<li>第 4 个最小妙数是 <code>"5489355421"</code></li>
2120
</ul>
2221
</li>
23-
2422
</ul>
2523

2624
<p>返回要得到第 <code>k</code> 个 <strong>最小妙数</strong> 需要对 <code>num</code> 执行的 <strong>相邻位数字交换的最小次数</strong> 。</p>

solution/1800-1899/1850.Minimum Adjacent Swaps to Reach the Kth Smallest Number/README_EN.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@
1010

1111
<ul>
1212
<li>For example, when <code>num = &quot;5489355142&quot;</code>:
13-
1413
<ul>
1514
<li>The 1<sup>st</sup> smallest wonderful integer is <code>&quot;5489355214&quot;</code>.</li>
1615
<li>The 2<sup>nd</sup> smallest wonderful integer is <code>&quot;5489355241&quot;</code>.</li>
1716
<li>The 3<sup>rd</sup> smallest wonderful integer is <code>&quot;5489355412&quot;</code>.</li>
1817
<li>The 4<sup>th</sup> smallest wonderful integer is <code>&quot;5489355421&quot;</code>.</li>
1918
</ul>
2019
</li>
21-
2220
</ul>
2321

2422
<p>Return <em>the <strong>minimum number of adjacent digit swaps</strong> that needs to be applied to </em><code>num</code><em> to reach the </em><code>k<sup>th</sup></code><em><strong> smallest wonderful</strong> integer</em>.</p>

solution/1800-1899/1854.Maximum Population Year/README.md

Lines changed: 109 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@
4444

4545
**方法一:差分数组**
4646

47+
我们注意到,年份的范围是 $[1950,..2050]$,因此我们可以将这些年份映射到一个长度为 $101$ 的数组 $d$ 中,数组的下标表示年份减去 $1950$ 的值。
48+
49+
接下来遍历 $logs$,对于每个人,我们将 $d[birth_i - 1950]$ 加 $1$,将 $d[death_i - 1950]$ 减 $1$。最后遍历数组 $d$,求出前缀和的最大值,即为人口最多的年份,再加上 $1950$ 即为答案。
50+
51+
时间复杂度 $O(n)$,空间复杂度 $O(C)$。其中 $n$ 为数组 $logs$ 的长度;而 $C$ 为年份的范围大小,即 $2050 - 1950 + 1 = 101$。
52+
4753
<!-- tabs:start -->
4854

4955
### **Python3**
@@ -53,18 +59,18 @@
5359
```python
5460
class Solution:
5561
def maximumPopulation(self, logs: List[List[int]]) -> int:
56-
delta = [0] * 2055
57-
for birth, death in logs:
58-
delta[birth] += 1
59-
delta[death] -= 1
60-
61-
mx = res = cur = 0
62-
for i, v in enumerate(delta):
63-
cur += v
64-
if mx < cur:
65-
mx = cur
66-
res = i
67-
return res
62+
d = [0] * 101
63+
offset = 1950
64+
for a, b in logs:
65+
a, b = a - offset, b - offset
66+
d[a] += 1
67+
d[b] -= 1
68+
s = mx = j = 0
69+
for i, x in enumerate(d):
70+
s += x
71+
if mx < s:
72+
mx, j = s, i
73+
return j + offset
6874
```
6975

7076
### **Java**
@@ -74,74 +80,52 @@ class Solution:
7480
```java
7581
class Solution {
7682
public int maximumPopulation(int[][] logs) {
77-
int[] delta = new int[2055];
78-
for (int[] log : logs) {
79-
++delta[log[0]];
80-
--delta[log[1]];
83+
int[] d = new int[101];
84+
final int offset = 1950;
85+
for (var log : logs) {
86+
int a = log[0] - offset;
87+
int b = log[1] - offset;
88+
++d[a];
89+
--d[b];
8190
}
82-
int res = 0, mx = 0, cur = 0;
83-
for (int i = 0; i < delta.length; ++i) {
84-
cur += delta[i];
85-
if (cur > mx) {
86-
mx = cur;
87-
res = i;
91+
int s = 0, mx = 0;
92+
int j = 0;
93+
for (int i = 0; i < d.length; ++i) {
94+
s += d[i];
95+
if (mx < s) {
96+
mx = s;
97+
j = i;
8898
}
8999
}
90-
return res;
100+
return j + offset;
91101
}
92102
}
93103
```
94104

95-
### **JavaScript**
96-
97-
```js
98-
/**
99-
* @param {number[][]} logs
100-
* @return {number}
101-
*/
102-
var maximumPopulation = function (logs) {
103-
const offset = 1950;
104-
const len = 2050 - 1950 + 1;
105-
let delta = new Array(len).fill(0);
106-
for (let log of logs) {
107-
delta[log[0] - offset] += 1;
108-
delta[log[1] - offset] -= 1;
109-
}
110-
let max = 0;
111-
let total = 0;
112-
let index = 0;
113-
for (let i = 0; i < len; i++) {
114-
total += delta[i];
115-
if (total > max) {
116-
max = total;
117-
index = i;
118-
}
119-
}
120-
return index + offset;
121-
};
122-
```
123-
124105
### **C++**
125106

126107
```cpp
127108
class Solution {
128109
public:
129110
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];
111+
int d[101]{};
112+
const int offset = 1950;
113+
for (auto& log : logs) {
114+
int a = log[0] - offset;
115+
int b = log[1] - offset;
116+
++d[a];
117+
--d[b];
135118
}
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;
119+
int s = 0, mx = 0;
120+
int j = 0;
121+
for (int i = 0; i < 101; ++i) {
122+
s += d[i];
123+
if (mx < s) {
124+
mx = s;
125+
j = i;
142126
}
143127
}
144-
return res + offset;
128+
return j + offset;
145129
}
146130
};
147131
```
@@ -150,21 +134,72 @@ public:
150134
151135
```go
152136
func maximumPopulation(logs [][]int) int {
153-
delta := make([]int, 101)
137+
d := [101]int{}
154138
offset := 1950
155139
for _, log := range logs {
156-
delta[log[0]-offset]++
157-
delta[log[1]-offset]--
140+
a, b := log[0]-offset, log[1]-offset
141+
d[a]++
142+
d[b]--
158143
}
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
144+
var s, mx, j int
145+
for i, x := range d {
146+
s += x
147+
if mx < s {
148+
mx = s
149+
j = i
165150
}
166151
}
167-
return res + offset
152+
return j + offset
153+
}
154+
```
155+
156+
### **JavaScript**
157+
158+
```js
159+
/**
160+
* @param {number[][]} logs
161+
* @return {number}
162+
*/
163+
var maximumPopulation = function (logs) {
164+
const d = new Array(101).fill(0);
165+
const offset = 1950;
166+
for (let [a, b] of logs) {
167+
a -= offset;
168+
b -= offset;
169+
d[a]++;
170+
d[b]--;
171+
}
172+
let j = 0;
173+
for (let i = 0, s = 0, mx = 0; i < 101; ++i) {
174+
s += d[i];
175+
if (mx < s) {
176+
mx = s;
177+
j = i;
178+
}
179+
}
180+
return j + offset;
181+
};
182+
```
183+
184+
### **TypeScript**
185+
186+
```ts
187+
function maximumPopulation(logs: number[][]): number {
188+
const d: number[] = new Array(101).fill(0);
189+
const offset = 1950;
190+
for (const [birth, death] of logs) {
191+
d[birth - offset]++;
192+
d[death - offset]--;
193+
}
194+
let j = 0;
195+
for (let i = 0, s = 0, mx = 0; i < d.length; ++i) {
196+
s += d[i];
197+
if (mx < s) {
198+
mx = s;
199+
j = i;
200+
}
201+
}
202+
return j + offset;
168203
}
169204
```
170205

0 commit comments

Comments
 (0)