Maximum Number of Events That Can Be Attended

Given an array of events where events[i] = [startDayi, endDayi]. Every event i starts at startDayi and ends at endDayi.
You can attend an event i on any day d where startTimei <= d <= endTimei. Notice that you can only attend one event at any time d.
Return the maximum number of events you can attend.
Example:
Input: events = [[1,2],[2,3],[3,4]]
Output: 3

Approach

Java


import java.util.Arrays;
import java.util.Comparator;

public class MaxNumEventsAttended {
    public static void main(String[] args) {
        int events[][] = { { 12 }, { 23 }, { 34 } };
        System.out.println(maxEvents(events));
    }


    // function to count the events
    static int maxEvents(int[][] events) {
        // java 8
        // Arrays.sort(events, (a, b) -> (a[1] == b[1]) ? 
        //(a[0] - b[0]) : (a[1] - b[1]));
        // sort array based on condition
        Arrays.sort(events, new Comparator<int[]>() {
            @Override
            public int compare(int[] aint[] b) {
                if (a[1] == b[1])
                    return a[0] - b[0];
                else
                    return a[1] - b[1];
            }
        });

        int n = events.length;
        int cnt = 0;
        int start = 0, temp = 0;
        boolean vis[] = new boolean[events[n - 1][1] + 1];

        // iterate for all events
        for (int i = 0; i < n; i++) {
            if (i > 0 && events[i][0] == events[i - 1][0]) {
                start = temp;
            } else
                start = events[i][0];
            for (int j = start; j <= events[i][1]; j++) {
                if (vis[j] == false) {
                    temp = j;
                    cnt++;
                    vis[j] = true;
                    break;
                }
            }
        }
        return cnt;
    }
}

C++

#include <bits/stdc++.h>
using  namespace std;

//comparator used for sorting
static bool cmp(vector<int&a,vector<int&b)
{
        if(a[1]==b[1])
              return a[0]<b[0];
        return a[1]<b[1];
}

//function to count the events
int maxEvents(vector<vector<int>>& events)
{
        sort(events.begin(),events.end(),cmp);
        int n=events.size();
        int cnt=0;
        int start=0,temp=0;
        bool vis[events[n-1][1]+1];
        memset(vis,false,sizeof(vis));

        //itearte for all events
        for(int i=0;i<n;i++)
         {
           if(i>0&&events[i][0]==events[i-1][0])
           {
               start=temp;
           }
            else
                start=events[i][0];
            for(int j=start;j<=events[i][1];j++)
            {
                if(vis[j]==false)
                {
                    temp=j;
                    cnt++;
                    vis[j]=true;
                    break;
                }
            }
         }
        return cnt;
}

int main()
{
    vector<vector<int>> events ={{1,2},{2,3},{3,4}};
    cout<<maxEvents(events);
    return 0;
}


No comments:

Post a Comment