Skip to content

Commit 65a87b7

Browse files
committed
feat: add solutions to lc problems: No.1094,1854
1 parent e947467 commit 65a87b7

File tree

9 files changed

+231
-115
lines changed

9 files changed

+231
-115
lines changed

solution/1000-1099/1094.Car Pooling/README.md

+20-25
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464

6565
<!-- 这里可写通用的实现逻辑 -->
6666

67-
差分数组
67+
差分数组
6868

6969
<!-- tabs:start -->
7070

@@ -162,30 +162,25 @@ public:
162162
};
163163
```
164164
165-
### **JavaScript**
166-
167-
```js
168-
/**
169-
* @param {number[][]} trips
170-
* @param {number} capacity
171-
* @return {boolean}
172-
*/
173-
var carPooling = function(trips, capacity) {
174-
let delta = new Array();
175-
for (let trip of trips) {
176-
let [num, start, end] = trip;
177-
delta[start] = (delta[start] || 0) + num;
178-
delta[end] = (delta[end] || 0) - num;
179-
}
180-
let total = 0;
181-
for (let i = 0; i < delta.length; i++) {
182-
let cur = delta[i];
183-
if (cur == undefined) continue;
184-
total += cur;
185-
if (total > capacity) return false;
186-
}
187-
return true;
188-
};
165+
### **Go**
166+
167+
```go
168+
func carPooling(trips [][]int, capacity int) bool {
169+
delta := make([]int, 1010)
170+
for _, trip := range trips {
171+
num, start, end := trip[0], trip[1], trip[2]
172+
delta[start] += num
173+
delta[end] -= num
174+
}
175+
cur := 0
176+
for _, num := range delta {
177+
cur += num
178+
if cur > capacity {
179+
return false
180+
}
181+
}
182+
return true
183+
}
189184
```
190185

191186
### **...**

solution/1000-1099/1094.Car Pooling/README_EN.md

+19-24
Original file line numberDiff line numberDiff line change
@@ -160,30 +160,25 @@ public:
160160
};
161161
```
162162
163-
### **JavaScript**
164-
165-
```js
166-
/**
167-
* @param {number[][]} trips
168-
* @param {number} capacity
169-
* @return {boolean}
170-
*/
171-
var carPooling = function(trips, capacity) {
172-
let delta = new Array();
173-
for (let trip of trips) {
174-
let [num, start, end] = trip;
175-
delta[start] = (delta[start] || 0) + num;
176-
delta[end] = (delta[end] || 0) - num;
177-
}
178-
let total = 0;
179-
for (let i = 0; i < delta.length; i++) {
180-
let cur = delta[i];
181-
if (cur == undefined) continue;
182-
total += cur;
183-
if (total > capacity) return false;
184-
}
185-
return true;
186-
};
163+
### **Go**
164+
165+
```go
166+
func carPooling(trips [][]int, capacity int) bool {
167+
delta := make([]int, 1010)
168+
for _, trip := range trips {
169+
num, start, end := trip[0], trip[1], trip[2]
170+
delta[start] += num
171+
delta[end] -= num
172+
}
173+
cur := 0
174+
for _, num := range delta {
175+
cur += num
176+
if cur > capacity {
177+
return false
178+
}
179+
}
180+
return true
181+
}
187182
```
188183

189184
### **...**
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
func carPooling(trips [][]int, capacity int) bool {
2+
delta := make([]int, 1010)
3+
for _, trip := range trips {
4+
num, start, end := trip[0], trip[1], trip[2]
5+
delta[start] += num
6+
delta[end] -= num
7+
}
8+
cur := 0
9+
for _, num := range delta {
10+
cur += num
11+
if cur > capacity {
12+
return false
13+
}
14+
}
15+
return true
16+
}

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

+62-34
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,6 @@
4444

4545
差分数组实现。
4646

47-
用 delta 数组记录每个人的出生和死亡年份。
48-
49-
题目中起始年份为 1950,我们希望数组的起始下标对应起始年份,并且年份与数组下标一一对应,因此我们需要引入起始年份与数组起始下标之差 `offset=1950`,使得下标 i 对应 `i+offset` 年。
50-
51-
遍历 logs 时,将每个人出生年份对应的变化量加上 1,同时将死亡年份对应的变化量减去 1。
52-
53-
最后,遍历 delta 数组,可以求出每一年的人口数量并维护其最大值和对应的最小下标 res。遍历结束后,将最小下标加上 offset,即是所求的年份。
54-
5547
<!-- tabs:start -->
5648

5749
### **Python3**
@@ -61,23 +53,18 @@
6153
```python
6254
class Solution:
6355
def maximumPopulation(self, logs: List[List[int]]) -> int:
64-
offset = 1950
65-
delta = [0] * 101
66-
# 遍历每个人的出生和死亡年份
56+
delta = [0] * 2055
6757
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
7764
if mx < cur:
7865
mx = cur
7966
res = i
80-
return res + offset
67+
return res
8168
```
8269

8370
### **Java**
@@ -87,26 +74,20 @@ class Solution:
8774
```java
8875
class Solution {
8976
public int maximumPopulation(int[][] logs) {
90-
int offset = 1950;
91-
int[] delta = new int[101];
92-
// 遍历每个人的出生和死亡年份
77+
int[] delta = new int[2055];
9378
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]];
9881
}
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) {
10384
cur += delta[i];
104-
if (mx < cur) {
85+
if (cur > mx) {
10586
mx = cur;
10687
res = i;
10788
}
10889
}
109-
return res + offset;
90+
return res;
11091
}
11192
}
11293
```
@@ -140,6 +121,53 @@ var maximumPopulation = function(logs) {
140121
};
141122
```
142123

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+
143171
### **...**
144172

145173
```

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

+62-16
Original file line numberDiff line numberDiff line change
@@ -46,40 +46,39 @@ The earlier year between them is 1960.</pre>
4646
```python
4747
class Solution:
4848
def maximumPopulation(self, logs: List[List[int]]) -> int:
49-
offset = 1950
50-
delta = [0] * 101
49+
delta = [0] * 2055
5150
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]
51+
delta[birth] += 1
52+
delta[death] -= 1
53+
54+
mx = res = cur = 0
55+
for i, v in enumerate(delta):
56+
cur += v
5757
if mx < cur:
5858
mx = cur
5959
res = i
60-
return res + offset
60+
return res
6161
```
6262

6363
### **Java**
6464

6565
```java
6666
class Solution {
6767
public int maximumPopulation(int[][] logs) {
68-
int offset = 1950;
69-
int[] delta = new int[101];
68+
int[] delta = new int[2055];
7069
for (int[] log : logs) {
71-
++delta[log[0] - offset];
72-
--delta[log[1] - offset];
70+
++delta[log[0]];
71+
--delta[log[1]];
7372
}
74-
int mx = 0, cur = 0, res = 0;
75-
for (int i = 0; i < 101; ++i) {
73+
int res = 0, mx = 0, cur = 0;
74+
for (int i = 0; i < delta.length; ++i) {
7675
cur += delta[i];
77-
if (mx < cur) {
76+
if (cur > mx) {
7877
mx = cur;
7978
res = i;
8079
}
8180
}
82-
return res + offset;
81+
return res;
8382
}
8483
}
8584
```
@@ -113,6 +112,53 @@ var maximumPopulation = function(logs) {
113112
};
114113
```
115114

115+
### **C++**
116+
117+
```cpp
118+
class Solution {
119+
public:
120+
int maximumPopulation(vector<vector<int>>& logs) {
121+
vector<int> delta(101, 0);
122+
int offset = 1950;
123+
for (auto log : logs) {
124+
++delta[log[0] - offset];
125+
--delta[log[1] - offset];
126+
}
127+
int res = 0, mx = 0, cur = 0;
128+
for (int i = 0; i < delta.size(); ++i) {
129+
cur += delta[i];
130+
if (cur > mx) {
131+
mx = cur;
132+
res = i;
133+
}
134+
}
135+
return res + offset;
136+
}
137+
};
138+
```
139+
140+
### **Go**
141+
142+
```go
143+
func maximumPopulation(logs [][]int) int {
144+
delta := make([]int, 101)
145+
offset := 1950
146+
for _, log := range logs {
147+
delta[log[0]-offset]++
148+
delta[log[1]-offset]--
149+
}
150+
res, mx, cur := 0, 0, 0
151+
for i := 0; i < len(delta); i++ {
152+
cur += delta[i]
153+
if cur > mx {
154+
mx = cur
155+
res = i
156+
}
157+
}
158+
return res + offset
159+
}
160+
```
161+
116162
### **...**
117163

118164
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
class Solution {
2+
public:
3+
int maximumPopulation(vector<vector<int>>& logs) {
4+
vector<int> delta(101, 0);
5+
int offset = 1950;
6+
for (auto log : logs) {
7+
++delta[log[0] - offset];
8+
--delta[log[1] - offset];
9+
}
10+
int res = 0, mx = 0, cur = 0;
11+
for (int i = 0; i < delta.size(); ++i) {
12+
cur += delta[i];
13+
if (cur > mx) {
14+
mx = cur;
15+
res = i;
16+
}
17+
}
18+
return res + offset;
19+
}
20+
};

0 commit comments

Comments
 (0)