LeetCode-1353.最大参加可能な会議数貪欲+優先キュー
14415 ワード
ここではテーマの説明です:LeetCode-1353.最大参加可能な会議数
欲張り+優先キュー解法
私たちは貪欲な原則を使用します.ある日複数の会議に参加できるとき、私たちは終了時間が一番早く参加することを選択します.
私たちは優先キューを使用して当日参加できる会議を格納し、優先度は会議の終了時間によって決定され、O(1)の時間オーバーヘッドの中で終了時間の最も早い会議を見つけてキューを出させ、会議数+1に参加することを保証する.
では、ある日、どの会議に参加できるかをどのように確定しますか?私たちは事前に会議を格納する配列を開始時間昇順に並べ、ある日、当日を開始時間とするすべての会議を優先キューに入れ、優先キューを挿入する時間の複雑さはO(logn)である.そして、チームヘッドからのクリア終了時間が当日より早いが、まだ参加されていない会議.
優先キューがどのように実現されるかについては、
JAva問題解コード:
時間の複雑さ:優先キューにすべての要素O(nlogn)をソートして挿入し、すべての要素優先キューはキューO(n)をリストするので、O(nlogn)
空間複雑度:O(n)
欲張り+優先キュー解法
私たちは貪欲な原則を使用します.ある日複数の会議に参加できるとき、私たちは終了時間が一番早く参加することを選択します.
私たちは優先キューを使用して当日参加できる会議を格納し、優先度は会議の終了時間によって決定され、O(1)の時間オーバーヘッドの中で終了時間の最も早い会議を見つけてキューを出させ、会議数+1に参加することを保証する.
では、ある日、どの会議に参加できるかをどのように確定しますか?私たちは事前に会議を格納する配列を開始時間昇順に並べ、ある日、当日を開始時間とするすべての会議を優先キューに入れ、優先キューを挿入する時間の複雑さはO(logn)である.そして、チームヘッドからのクリア終了時間が当日より早いが、まだ参加されていない会議.
優先キューがどのように実現されるかについては、
java.util.PriorityQueue
を使用しています.皆さんも自分でスタックで優先キューを実現してみてください.JAva問題解コード:
class Solution {
public int maxEvents(int[][] events) {
if(events.length<=1)
{
return events.length;
}
Event[] eventArr=new Event[events.length];
int eariest=events[0][0],latest=events[0][1];
for(int i=0;i<events.length;i++)
{
eventArr[i]=new Event(events[i][0],events[i][1]);
eariest=Math.min(eariest,events[i][0]);
latest=Math.max(latest,events[i][1]);
}
Arrays.sort(eventArr,new EventComparator()); //
PriorityQueue<Event> canJoin=new PriorityQueue<>(); // , , ,
int numJoin=0; //
int index=0;
for(int day=eariest;day<=latest;day++)
{
for(;index<eventArr.length;index++) //
{
if(eventArr[index].start<=day)
{
canJoin.offer(eventArr[index]);
}
else
{
break;
}
}
while(!canJoin.isEmpty()) //
{
if(canJoin.peek().end<day)
{
canJoin.remove();
}
else
{
break;
}
}
if(!canJoin.isEmpty()) // , +1
{
canJoin.remove();
numJoin++;
}
}
return numJoin;
}
}
class Event implements java.lang.Comparable<Event> //
{
int start;
int end;
Event(int start,int end)
{
this.start=start;
this.end=end;
}
@Override
public int compareTo(Event e) //
{
return this.end-e.end;
}
}
class EventComparator implements java.util.Comparator<Event> // Event
{
@Override
public int compare(Event e1,Event e2) //
{
return e1.start-e2.start;
}
}
時間の複雑さ:優先キューにすべての要素O(nlogn)をソートして挿入し、すべての要素優先キューはキューO(n)をリストするので、O(nlogn)
空間複雑度:O(n)