-
Notifications
You must be signed in to change notification settings - Fork 119
/
Copy pathMaximum Earnings From Taxi.js
48 lines (35 loc) · 1.07 KB
/
Maximum Earnings From Taxi.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// Runtime: 397 ms (Top 81.82%) | Memory: 68.1 MB (Top 93.94%)
// Same as https://leetcode.com/problems/maximum-profit-in-job-scheduling/
// Time -> O(nlogn), where n = length of rides array
// Space -> O(n), where n = length of rides array
/**
* @param {number} n
* @param {number[][]} rides
* @return {number}
*/
var maxTaxiEarnings = function(n, rides) {
const len = rides.length
rides.sort((a,b) => {
return a[1] - b[1]
})
// Binary search
function binarySearch(idx) {
let low = 0, high = idx
while(low < high) {
let mid = Math.trunc((low+high)/2)
if(rides[mid][1] <= rides[idx][0]) low = mid+1
else high = mid
}
return high === 0 ? -1 : high-1
}
let dp = new Array(len).fill(0)
dp[0] = rides[0][2] + (rides[0][1] - rides[0][0])
for(let i=1; i<len; i++) {
dp[i] = rides[i][2] + (rides[i][1] - rides[i][0])
let j = binarySearch(i)
if(j !== -1)
dp[i] += dp[j]
dp[i] = Math.max(dp[i], dp[i-1])
}
return dp[len-1]
};