Skip to content

Commit 8444e30

Browse files
committed
feat: add solutions to lc problem: No.1235
No.1235.Maximum Profit in Job Scheduling
1 parent c17447c commit 8444e30

File tree

3 files changed

+142
-0
lines changed

3 files changed

+142
-0
lines changed

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,21 @@ class Solution:
123123
return dfs(0)
124124
```
125125

126+
```python
127+
class Solution:
128+
def jobScheduling(self, startTime: List[int], endTime: List[int], profit: List[int]) -> int:
129+
@cache
130+
def dfs(i: int) -> int:
131+
if i >= n:
132+
return 0
133+
j = bisect_left(idx, endTime[idx[i]], key=lambda i: startTime[i])
134+
return max(dfs(i + 1), profit[idx[i]] + dfs(j))
135+
136+
n = len(startTime)
137+
idx = sorted(range(n), key=lambda i: startTime[i])
138+
return dfs(0)
139+
```
140+
126141
```python
127142
class Solution:
128143
def jobScheduling(self, startTime: List[int], endTime: List[int], profit: List[int]) -> int:
@@ -323,6 +338,45 @@ func max(a, b int) int {
323338
}
324339
```
325340

341+
### **TypeScript**
342+
343+
```ts
344+
function jobScheduling(
345+
startTime: number[],
346+
endTime: number[],
347+
profit: number[],
348+
): number {
349+
const n = startTime.length;
350+
const f = new Array(n).fill(0);
351+
const idx = new Array(n).fill(0).map((_, i) => i);
352+
idx.sort((i, j) => startTime[i] - startTime[j]);
353+
const search = (x: number) => {
354+
let l = 0;
355+
let r = n;
356+
while (l < r) {
357+
const mid = (l + r) >> 1;
358+
if (startTime[idx[mid]] >= x) {
359+
r = mid;
360+
} else {
361+
l = mid + 1;
362+
}
363+
}
364+
return l;
365+
};
366+
const dfs = (i: number): number => {
367+
if (i >= n) {
368+
return 0;
369+
}
370+
if (f[i] !== 0) {
371+
return f[i];
372+
}
373+
const j = search(endTime[idx[i]]);
374+
return (f[i] = Math.max(dfs(i + 1), dfs(j) + profit[idx[i]]));
375+
};
376+
return dfs(0);
377+
}
378+
```
379+
326380
### **...**
327381

328382
```

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

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,21 @@ class Solution:
7373
return dfs(0)
7474
```
7575

76+
```python
77+
class Solution:
78+
def jobScheduling(self, startTime: List[int], endTime: List[int], profit: List[int]) -> int:
79+
@cache
80+
def dfs(i: int) -> int:
81+
if i >= n:
82+
return 0
83+
j = bisect_left(idx, endTime[idx[i]], key=lambda i: startTime[i])
84+
return max(dfs(i + 1), profit[idx[i]] + dfs(j))
85+
86+
n = len(startTime)
87+
idx = sorted(range(n), key=lambda i: startTime[i])
88+
return dfs(0)
89+
```
90+
7691
```python
7792
class Solution:
7893
def jobScheduling(self, startTime: List[int], endTime: List[int], profit: List[int]) -> int:
@@ -271,6 +286,45 @@ func max(a, b int) int {
271286
}
272287
```
273288

289+
### **TypeScript**
290+
291+
```ts
292+
function jobScheduling(
293+
startTime: number[],
294+
endTime: number[],
295+
profit: number[],
296+
): number {
297+
const n = startTime.length;
298+
const f = new Array(n).fill(0);
299+
const idx = new Array(n).fill(0).map((_, i) => i);
300+
idx.sort((i, j) => startTime[i] - startTime[j]);
301+
const search = (x: number) => {
302+
let l = 0;
303+
let r = n;
304+
while (l < r) {
305+
const mid = (l + r) >> 1;
306+
if (startTime[idx[mid]] >= x) {
307+
r = mid;
308+
} else {
309+
l = mid + 1;
310+
}
311+
}
312+
return l;
313+
};
314+
const dfs = (i: number): number => {
315+
if (i >= n) {
316+
return 0;
317+
}
318+
if (f[i] !== 0) {
319+
return f[i];
320+
}
321+
const j = search(endTime[idx[i]]);
322+
return (f[i] = Math.max(dfs(i + 1), dfs(j) + profit[idx[i]]));
323+
};
324+
return dfs(0);
325+
}
326+
```
327+
274328
### **...**
275329

276330
```
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
function jobScheduling(
2+
startTime: number[],
3+
endTime: number[],
4+
profit: number[],
5+
): number {
6+
const n = startTime.length;
7+
const f = new Array(n).fill(0);
8+
const idx = new Array(n).fill(0).map((_, i) => i);
9+
idx.sort((i, j) => startTime[i] - startTime[j]);
10+
const search = (x: number) => {
11+
let l = 0;
12+
let r = n;
13+
while (l < r) {
14+
const mid = (l + r) >> 1;
15+
if (startTime[idx[mid]] >= x) {
16+
r = mid;
17+
} else {
18+
l = mid + 1;
19+
}
20+
}
21+
return l;
22+
};
23+
const dfs = (i: number): number => {
24+
if (i >= n) {
25+
return 0;
26+
}
27+
if (f[i] !== 0) {
28+
return f[i];
29+
}
30+
const j = search(endTime[idx[i]]);
31+
return (f[i] = Math.max(dfs(i + 1), dfs(j) + profit[idx[i]]));
32+
};
33+
return dfs(0);
34+
}

0 commit comments

Comments
 (0)