与えられた数字の最大の時間
8890 ワード
与えられた数字の最大の時間
問題
4桁の配列
arr
を考えれば、正確に一度に各々の桁を使って作られることができる最新の24時間の時間を見つけてください.24時間は
"HH:MM"
、HH
と00
の間、23
はMM
と00
の間にある.最も早い24時間は59
です、そして、最新は00:00
です.23:59
形式の最新24時間を返します.有効な時間を指定できない場合は、空の文字列を返します.例1 :
Input: arr = [1,2,3,4]
Output: "23:41"
Explanation: The valid 24-hour times are "12:34", "12:43", "13:24", "13:42", "14:23", "14:32", "21:34", "21:43", "23:14", and "23:41". Of these times, "23:41" is the latest.
例2 :Input: arr = [5,5,5,5]
Output: ""
Explanation: There are no valid 24-hour times as "55:55" is not valid.
例3 :Input: arr = [0,0,0,0]
Output: "00:00"
例4 :Input: arr = [0,0,1,0]
Output: "10:00"
制約 `arr.length == 4`
`0 <= arr[i] <= 9`
始めましょう
私たちの主な目標は、問題を解決すると同時に、最小限の空間の複雑さと最高の線形時間の複雑さを達成することです.あなたが問題解決やデータ構造の問題を試みるために初心者なら、私はあなたがブルートフォースアプローチを開始し、最適な時間/空間の複雑さへのソリューションを最適化しようとすることをお勧めします.
分析
問題声明を分析し始めましょう.4桁の配列を考えると、各桁を使用して行うことができる最新の24時間の時間を見つける必要がある“一度だけ”.
アルゴリズムは擬似コード
Loop through every hour and digit combination. If we find the exact
four array elements. That's it. That is our answer.
The Latest 24-hour Time!
解決策
class Solution {
public String largestTimeFromDigits(int[] arr) {
for(int hour = 23; hour >= 0; hour--) {
for(int minute = 59; minute >= 0; minute--) {
boolean latest_hour = true;
int[] count = new int[10];
count[hour < 10 ? 0 : hour / 10]++;
count[hour < 10 ? hour : hour % 10]++;
count[minute < 10 ? 0 : minute / 10]++;
count[minute < 10 ? minute : minute % 10]++;
for(int item : arr) {
if(--count[item] < 0) {
latest_hour = false;
break;
}
}
if(latest_hour)
return String.format("%02d:%02d", hour, minute);
}
}
return "";
}
}
複雑さ
時間の複雑度=> O ( 23 x 59 x 4 )== O ( 1 )
スペース複雑度=> O ( 1 )
結論
この問題はダイナミックプログラミングの非常に良い例です.更なる学習のためにこのカテゴリーでより多くの例のためにチェックしてください.動的計画法は、トップダウンとボトムアップアプローチの2つの方法を有する.私は2つの違いを説明する将来の記事を見てください!
参考文献
この記事のleetcode問題
https://leetcode.com/problems/largest-time-for-given-digits/
この投稿を読んでくれてありがとう!
私は、この記事が有益で有益であることを望みます.それが好きなら、共有してください!関連コンテンツのために私に従ってください.
ハッピーラーニング!
Reference
この問題について(与えられた数字の最大の時間), 我々は、より多くの情報をここで見つけました https://dev.to/geetcloud/leetcode-sep-21-challenge-series-day-1-largest-time-for-given-digits-1glpテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol