Menu
CoddyTech

Activity Selection Problem

やさしい貪欲法ソートpython iconjava iconcpp iconc iconjs icon+10

アクティビティ i は時刻 start[i] から時刻 finish[i] まで行われます。1人が同時に行えるアクティビティは1つで、次のアクティビティは前のアクティビティが終了した後に開始しなければなりません。別のアクティビティが終了する時刻ちょうどに開始するアクティビティを、その後に行うことはできません。

1人が行えるアクティビティの最大数を返してください。

関数

maxActivities(start: integer-array, finish: integer-array) → integer
startinteger-array
各アクティビティの開始時刻
finishinteger-array
各アクティビティの終了時刻。finish[i] は start[i] に対応します
戻り値integer
一人が次々にできるアクティビティの最大数

制約

  • 1 ≤ start.length == finish.length ≤ 5000
  • 0 ≤ start[i] ≤ finish[i] ≤ 105
  • アクティビティは同時に開始および終了することがあります。配列はソートされていません。

例

入力
start = [10, 12, 20, 14, 25, 21]finish = [13, 16, 24, 19, 30, 22]
出力
4
説明
10から13、14から19、21から22、25から30を行うと4になります。5は不可能です。10から13は12から16と重なり、21から22は20から24と重なるためです。
challenge icon

発展問題

今では2人が並行して作業し、それぞれ一度に1つの作業を行います。2人で一緒にいくつの作業をこなせますか?それぞれの作業は誰が担当すべきですか?

コードをリセット
def maxActivities(start, finish):
    # ここにコードを書いてください

テスト #1

テスト #2

テスト #3

引数

start = [10, 12, 20, 14, 25, 21]
finish = [13, 16, 24, 19, 30, 22]

期待される出力

4