731。私のカレンダー II
難易度: 中
トピック: 配列、二分探索、設計、セグメント ツリー、接頭辞の合計、順序付きセット
あなたはカレンダーとして使用するプログラムを実装しています。イベントを追加してもトリプルブッキングが発生しない場合は、新しいイベントを追加できます。
トリプルブッキングは、3 つのイベントに空ではない交差がある場合に発生します (つまり、ある瞬間が 3 つのイベントすべてに共通です)。
イベントは、半開間隔 [start, end) での予約を表す start と end の整数のペアとして表すことができます。start
MyCalendarTwo クラスを実装します。
例 1:
["MyCalendarTwo", "book", "book", "book", "book", "book", "book"] [[], [10, 20], [50, 60], [10, 40], [5, 15], [5, 10], [25, 55]]
[null, true, true, true, false, true, true]
MyCalendarTwo myCalendarTwo = new MyCalendarTwo(); myCalendarTwo.book(10, 20); // return True, The event can be booked. myCalendarTwo.book(50, 60); // return True, The event can be booked. myCalendarTwo.book(10, 40); // return True, The event can be double booked. myCalendarTwo.book(5, 15); // return False, The event cannot be booked, because it would result in a triple booking. myCalendarTwo.book(5, 10); // return True, The event can be booked, as it does not use time 10 which is already double booked. myCalendarTwo.book(25, 55); // return True, The event can be booked, as the time in [25, 40) will be double booked with the third event, the time [40, 50) will be single booked, and the time [50, 55) will be double booked with the second event.
制約:
ヒント:
解決策:
2 つの予約リストを維持する必要があります:
新しいイベントがリクエストされた場合、それがトリプルブッキング
を引き起こすかどうかを確認する必要があります。そのためには:最後に、イベントが両方のチェックに合格した場合は、単一予約
リストに追加します。
このソリューションを PHP で実装してみましょう: 731。私のカレンダー II
<?php class MyCalendarTwo { /** * @var array */ private $singleBookings; /** * @var array */ private $doubleBookings; /** */ function __construct() { ... ... ... /** * go to ./solution.php */ } /** * @param Integer $start * @param Integer $end * @return Boolean */ function book($start, $end) { ... ... ... /** * go to ./solution.php */ } } /** * Your MyCalendarTwo object will be instantiated and called as such: * $obj = MyCalendarTwo(); * $ret_1 = $obj->book($start, $end); */ // Example Usage $calendar = new MyCalendarTwo(); echo $calendar->book(10, 20) ? 'true' : 'false'; // true echo "\n"; echo $calendar->book(50, 60) ? 'true' : 'false'; // true echo "\n"; echo $calendar->book(10, 40) ? 'true' : 'false'; // true echo "\n"; echo $calendar->book(5, 15) ? 'true' : 'false'; // false echo "\n"; echo $calendar->book(5, 10) ? 'true' : 'false'; // true echo "\n"; echo $calendar->book(25, 55) ? 'true' : 'false'; // true echo "\n"; ?>
コンストラクター (__construct)
: シングル予約とダブル予約を保存するために、2 つの空の配列を使用してカレンダー オブジェクトを初期化します。ブック関数 (ブック)
:このソリューションは、問題の制約に応じて book 関数への最大 1000 回の呼び出しを効率的に処理します。
連絡先リンク
このシリーズが役立つと思われた場合は、GitHub で リポジトリ
にスターを付けるか、お気に入りのソーシャル ネットワークで投稿を共有することを検討してください。あなたのサポートは私にとって大きな意味を持ちます!このような役立つコンテンツがさらに必要な場合は、お気軽にフォローしてください:
以上が。私のカレンダーⅡの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。