2017-10-24 4 views
-3

6桁のリストが与えられている場合、それらの数字から形成できる最も早い時刻を返します。法定時間を構築できない場合は、-1を返します。6つの数字のリストから最も早い時刻を取得する

Example [1, 2, 3, 4, 5, 6] 
output: 12:34:56 

Example [1, 2, 3, 5, 8, 9] 
output: 12:38:59 

Example [1, 2, 3, 7, 8, 9] 
output: 17:28:39 

Example [6, 7, 8, 9, 9, 9] 
output: -1 

リストをソートすることから始めました。 2番目の例でケースを検出して8と5を入れ替える方法がわかりません。これを解決するためにどのようなアルゴリズムを使用できますか?

+0

なぜ、第3の出力の「17:28:39」の出力がないのですか?なぜ、*例2の出力が '12:35:89'でないのか説明できますか? –

+2

これまで書こうとしたコードを追加してください。 –

+0

@Scottはキャッチのおかげです。例を更新しました –

答えて

1

「ピックリスト」の中で最大のものから順に、時間桁を逆順に考えてみましょう。各割り当てで、pickから要素を削除します。

pick = [1, 2, 3, 5, 8, 9]   // just one of the examples 

time[6] = pick[6] 
    // pick = [1, 2, 3, 5, 8] 
time[5] = largest element of pick that's < 6; if none, return -1 
    // pick = [1, 2, 3, 8] 
time[4] = pick[4] 
    // pick = [1, 2, 3] 
time[2] = largest element of pick that's < 6; if none, return -1 
    // pick = [1, 2] 
time[1] = pick[1] 
    // pick = [] 

Finally, check the hours: if time[2] + 10* time[1] > 23, return -1 
0

右から左にスキャンを試みてください。次に、連結された数が60より大きい場合、条件を満たす十位数字をスキャンします。

または、十数位と1位を保持する変数を作成し、ones>0tens<6を検出するためにif-elseステートメントを使用してください。

関連する問題