単調に増加する数字LeetCode の問題へのリンク: https://leetcode-cn.com/problems/monotone-increasing-digits 負でない整数 N が与えられた場合、N 以下の最大の整数を見つけます。この整数は、各桁の数字が単調に増加するという事実を満たす必要があります。 (すべての隣接する数字 x と y が x <= y を満たす場合にのみ、整数は単調に増加すると言います。) 例1:
例2:
例3:
注: N は [0, 10^9] の範囲の整数です。 力ずくの解決法質問は非常に単純なので、最初に思いつくのは力ずくの解決法です。私が代わりにやってみますが、結果は当然タイムアウトです! コードは次のとおりです。
貪欲アルゴリズムこの問題では、N 以下の最大の単調増加する整数が求められるため、2 桁の数字を例に挙げます。 たとえば、98 の場合です。strNum[i - 1] > strNum[i] (非単調増加) になると、まず strNum[i - 1] -- にして、次に strNum[i] を 9 にして、整数が 89 になるようにします。これは、98 未満の最大の単調増加整数です。 この点をしっかり考えれば、この問題は簡単に解決できるでしょう。 局所最適: strNum[i - 1] > strNum[i] の場合、strNum[i - 1] -- とし、strNum[i] を 9 に設定します。これにより、これらの 2 つの数字が最大の単調増加する整数になることが保証されます。 グローバル最適値: N 以下の単調に増加する最大の整数を取得します。 ただし、局所最適値から大域最適値を導き出すには、トラバース順序とマークの開始点(一律 9 に変更)など、他の条件も必要です。 前から後ろへ移動しますか、それとも後ろから前へ移動しますか? 前から後ろへトラバースする場合、strNum[i - 1] > strNum[i] であれば、strNum[i - 1] を 1 減らします。ただし、このとき strNum[i - 1] を 1 減らすと、strNum[i - 2] より小さくなる可能性があります。 少し抽象的ですが、例えば332という数字を前から後ろへたどっていくと329になります。このとき、2は最初の数字の3より小さいので、実際の結果は299になるはずです。 したがって、前から後ろへトラバースすると、すでにトラバースされた結果が変わります。 次に、後ろから前へ走査することで、最後の比較の結果を再利用できます。332の値は後ろから前へ変化します: 332 -> 329 -> 299 トラバーサル順序が決定された後、局所最適解から大域最適解を推測できます。反例が見つからない場合は、貪欲法を試してください。 C++ コードは次のとおりです。
要約するこの問題では、98 などの 1 つの例についてのみ明確に考える必要があります。strNum[i - 1] > strNum[i] (非単調増加) になると、まず strNum[i - 1] を 1 減らし、strNum[i] に 9 を割り当てて、整数が 89 になるようにします。対応する貪欲な解決策を自然に考えることができます。 貪欲さについて考えるときは、トラバースの順序も考慮する必要があります。後ろから前へトラバースすることによってのみ、最後の比較の結果を再利用できます。 最終的なコードを実装するときには、値 9 の割り当てを開始する場所をマークするためのフラグを使用するなどのいくつかのテクニックも必要です。 その他の言語 ジャワ:
Java バージョン 1 では、String 配列が作成され、Integer.parseInt メソッドが複数回使用されるため、時間とスペースの使用量が膨大になり、12 ミリ秒かかります。次のバージョンでは、char 配列をその場で変更するため、1 ミリ秒かかります。
パイソン:
行く
ジャバスクリプト
|
<<: 1.2兆パラメータ:Googleの汎用スパース言語モデルGLaM、小サンプル学習がGPT-3を上回る
食べ物を注文した後、カメラをかざすだけで支払いが完了します。ホテルに宿泊する場合、顔をスキャンしない...
市場調査会社IDCは、2020年の世界の人工知能市場の規模は2019年に比べて12.3%増加すると予...
[[357620]]科学技術の発展に伴い、人類は機械工学、材料科学、電子技術、自動制御、コンピュータ...
最も注目されているテクノロジー企業OpenAIと世界一の富豪マスク氏との壮大な戦いは新たなレベルに達...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
北京時間2月15日、海外メディアの報道によると、大規模な人工ニューラルネットワークに基づく人工知能は...
[[433830]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitA...
人工知能と機械学習の技術が進歩するにつれ、企業や組織は競争上の優位性を得るためにこれらの機能を活用す...
この記事は公開アカウント「Reading Core Technique」(ID: AI_Discov...
この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...