Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit e99eae6

Browse files
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)

AltStyle によって変換されたページ (->オリジナル) /