Skip to content

Commit 383390d

Browse files
authoredMay 3, 2024
feat: add solutions to lc problem: No.1235 (#2719)
No.1235.Maximum Profit in Job Scheduling
1 parent 39f3686 commit 383390d

File tree

5 files changed

+104
-77
lines changed

5 files changed

+104
-77
lines changed
 

‎solution/1200-1299/1235.Maximum Profit in Job Scheduling/README.md

+35-28
Original file line numberDiff line numberDiff line change
@@ -260,16 +260,13 @@ class Solution:
260260
def jobScheduling(
261261
self, startTime: List[int], endTime: List[int], profit: List[int]
262262
) -> int:
263-
@cache
264-
def dfs(i: int) -> int:
265-
if i >= n:
266-
return 0
267-
j = bisect_left(idx, endTime[idx[i]], key=lambda i: startTime[i])
268-
return max(dfs(i + 1), profit[idx[i]] + dfs(j))
269-
270-
n = len(startTime)
271-
idx = sorted(range(n), key=lambda i: startTime[i])
272-
return dfs(0)
263+
jobs = sorted(zip(endTime, startTime, profit))
264+
n = len(profit)
265+
dp = [0] * (n + 1)
266+
for i, (_, s, p) in enumerate(jobs):
267+
j = bisect_right(jobs, s, hi=i, key=lambda x: x[0])
268+
dp[i + 1] = max(dp[i], dp[j] + p)
269+
return dp[n]
273270
```
274271

275272
```java
@@ -341,24 +338,34 @@ func jobScheduling(startTime []int, endTime []int, profit []int) int {
341338
}
342339
```
343340

344-
<!-- tabs:end -->
345-
346-
### 方法三
347-
348-
<!-- tabs:start -->
349-
350-
```python
351-
class Solution:
352-
def jobScheduling(
353-
self, startTime: List[int], endTime: List[int], profit: List[int]
354-
) -> int:
355-
jobs = sorted(zip(endTime, startTime, profit))
356-
n = len(profit)
357-
dp = [0] * (n + 1)
358-
for i, (_, s, p) in enumerate(jobs):
359-
j = bisect_right(jobs, s, hi=i, key=lambda x: x[0])
360-
dp[i + 1] = max(dp[i], dp[j] + p)
361-
return dp[n]
341+
```ts
342+
function jobScheduling(startTime: number[], endTime: number[], profit: number[]): number {
343+
const n = profit.length;
344+
const jobs: [number, number, number][] = Array.from({ length: n }, (_, i) => [
345+
startTime[i],
346+
endTime[i],
347+
profit[i],
348+
]);
349+
jobs.sort((a, b) => a[1] - b[1]);
350+
const dp: number[] = Array.from({ length: n + 1 }, () => 0);
351+
const search = (x: number, right: number): number => {
352+
let left = 0;
353+
while (left < right) {
354+
const mid = (left + right) >> 1;
355+
if (jobs[mid][1] > x) {
356+
right = mid;
357+
} else {
358+
left = mid + 1;
359+
}
360+
}
361+
return left;
362+
};
363+
for (let i = 0; i < n; ++i) {
364+
const j = search(jobs[i][0], i);
365+
dp[i + 1] = Math.max(dp[i], dp[j] + jobs[i][2]);
366+
}
367+
return dp[n];
368+
}
362369
```
363370

364371
<!-- tabs:end -->

‎solution/1200-1299/1235.Maximum Profit in Job Scheduling/README_EN.md

+35-28
Original file line numberDiff line numberDiff line change
@@ -253,16 +253,13 @@ class Solution:
253253
def jobScheduling(
254254
self, startTime: List[int], endTime: List[int], profit: List[int]
255255
) -> int:
256-
@cache
257-
def dfs(i: int) -> int:
258-
if i >= n:
259-
return 0
260-
j = bisect_left(idx, endTime[idx[i]], key=lambda i: startTime[i])
261-
return max(dfs(i + 1), profit[idx[i]] + dfs(j))
262-
263-
n = len(startTime)
264-
idx = sorted(range(n), key=lambda i: startTime[i])
265-
return dfs(0)
256+
jobs = sorted(zip(endTime, startTime, profit))
257+
n = len(profit)
258+
dp = [0] * (n + 1)
259+
for i, (_, s, p) in enumerate(jobs):
260+
j = bisect_right(jobs, s, hi=i, key=lambda x: x[0])
261+
dp[i + 1] = max(dp[i], dp[j] + p)
262+
return dp[n]
266263
```
267264

268265
```java
@@ -334,24 +331,34 @@ func jobScheduling(startTime []int, endTime []int, profit []int) int {
334331
}
335332
```
336333

337-
<!-- tabs:end -->
338-
339-
### Solution 3
340-
341-
<!-- tabs:start -->
342-
343-
```python
344-
class Solution:
345-
def jobScheduling(
346-
self, startTime: List[int], endTime: List[int], profit: List[int]
347-
) -> int:
348-
jobs = sorted(zip(endTime, startTime, profit))
349-
n = len(profit)
350-
dp = [0] * (n + 1)
351-
for i, (_, s, p) in enumerate(jobs):
352-
j = bisect_right(jobs, s, hi=i, key=lambda x: x[0])
353-
dp[i + 1] = max(dp[i], dp[j] + p)
354-
return dp[n]
334+
```ts
335+
function jobScheduling(startTime: number[], endTime: number[], profit: number[]): number {
336+
const n = profit.length;
337+
const jobs: [number, number, number][] = Array.from({ length: n }, (_, i) => [
338+
startTime[i],
339+
endTime[i],
340+
profit[i],
341+
]);
342+
jobs.sort((a, b) => a[1] - b[1]);
343+
const dp: number[] = Array.from({ length: n + 1 }, () => 0);
344+
const search = (x: number, right: number): number => {
345+
let left = 0;
346+
while (left < right) {
347+
const mid = (left + right) >> 1;
348+
if (jobs[mid][1] > x) {
349+
right = mid;
350+
} else {
351+
left = mid + 1;
352+
}
353+
}
354+
return left;
355+
};
356+
for (let i = 0; i < n; ++i) {
357+
const j = search(jobs[i][0], i);
358+
dp[i + 1] = Math.max(dp[i], dp[j] + jobs[i][2]);
359+
}
360+
return dp[n];
361+
}
355362
```
356363

357364
<!-- tabs:end -->

‎solution/1200-1299/1235.Maximum Profit in Job Scheduling/Solution2.py

+7-10
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,10 @@ class Solution:
22
def jobScheduling(
33
self, startTime: List[int], endTime: List[int], profit: List[int]
44
) -> int:
5-
@cache
6-
def dfs(i: int) -> int:
7-
if i >= n:
8-
return 0
9-
j = bisect_left(idx, endTime[idx[i]], key=lambda i: startTime[i])
10-
return max(dfs(i + 1), profit[idx[i]] + dfs(j))
11-
12-
n = len(startTime)
13-
idx = sorted(range(n), key=lambda i: startTime[i])
14-
return dfs(0)
5+
jobs = sorted(zip(endTime, startTime, profit))
6+
n = len(profit)
7+
dp = [0] * (n + 1)
8+
for i, (_, s, p) in enumerate(jobs):
9+
j = bisect_right(jobs, s, hi=i, key=lambda x: x[0])
10+
dp[i + 1] = max(dp[i], dp[j] + p)
11+
return dp[n]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
function jobScheduling(startTime: number[], endTime: number[], profit: number[]): number {
2+
const n = profit.length;
3+
const jobs: [number, number, number][] = Array.from({ length: n }, (_, i) => [
4+
startTime[i],
5+
endTime[i],
6+
profit[i],
7+
]);
8+
jobs.sort((a, b) => a[1] - b[1]);
9+
const dp: number[] = Array.from({ length: n + 1 }, () => 0);
10+
const search = (x: number, right: number): number => {
11+
let left = 0;
12+
while (left < right) {
13+
const mid = (left + right) >> 1;
14+
if (jobs[mid][1] > x) {
15+
right = mid;
16+
} else {
17+
left = mid + 1;
18+
}
19+
}
20+
return left;
21+
};
22+
for (let i = 0; i < n; ++i) {
23+
const j = search(jobs[i][0], i);
24+
dp[i + 1] = Math.max(dp[i], dp[j] + jobs[i][2]);
25+
}
26+
return dp[n];
27+
}

‎solution/1200-1299/1235.Maximum Profit in Job Scheduling/Solution3.py

-11
This file was deleted.

0 commit comments

Comments
 (0)