Skip to content

Commit e99eae6

Browse files
authored
Create 1751. Maximum Number of Events That Can Be Attended II
1 parent 1c6cb32 commit e99eae6

File tree

1 file changed

+51
-0
lines changed

1 file changed

+51
-0
lines changed
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
class Solution {
2+
int[][] dp=null;
3+
public int maxValue(int[][] events, int k) {
4+
int n = events.length;
5+
dp = new int[n][k+1];
6+
for(int[] d:dp){
7+
Arrays.fill(d,-1);
8+
}
9+
if(k == 1) {
10+
for(int[] event : events) {
11+
max = Math.max(event[2], max);
12+
}
13+
return max;
14+
}
15+
16+
Arrays.sort(events,(a,b) -> a[0]==b[0]?a[1]-b[1]:a[0]-b[0]);
17+
18+
return helper(events,0,k,n); //o(N*K) * O(logN)
19+
}
20+
21+
int helper(int[][] events,int pos,int k,int n){
22+
if(pos>=n || k==0){
23+
return 0;
24+
}
25+
26+
if(dp[pos][k]>-1){
27+
return dp[pos][k];
28+
}
29+
30+
int nextPos = nextEvent(events,pos,n); // O(logN)
31+
int select = events[pos][2] + helper(events,nextPos,k-1,n);
32+
int reject = helper(events,pos+1,k,n);
33+
dp[pos][k]= Math.max(select,reject);
34+
return dp[pos][k];
35+
}
36+
37+
int nextEvent(int[][] events,int pos, int n){
38+
int endDay = events[pos][1];
39+
pos++;
40+
while(pos<n){
41+
int mid = pos + (n-pos)/2;
42+
if(events[mid][0]>endDay){
43+
n =mid;
44+
}
45+
else{
46+
pos = mid+1;
47+
}
48+
}
49+
return n;
50+
}
51+
}

0 commit comments

Comments
 (0)