単調に増加する数字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を上回る
マスク氏は怒り、残酷なことを言った。 決してデラウェア州に法人を登録しないでください。 州裁判所はテ...
AI を取り巻く大騒ぎを考えると、フォーチュン 500 企業が必死になって LLM を実用化し、アメ...
編纂者:ヤン・ジェン制作:51CTO テクノロジースタック(WeChat ID:blog)ビル・ゲイ...
この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...
先週、Github で最も人気のあるプロジェクトは、最近バージョン 2.0 に更新された自然言語処理...
組合せ最適化問題の背景組み合わせ最適化は、NP 困難な制約付き最適化問題を解決することを目的とした、...
[[336650]]驚くべきことに、COVID-19の世界的大流行の中で、フィットネスやエクササイ...
[[320870]]迅速な感染検査から3Dプリントソリューションまで、世界中のテクノロジー企業が協力...
AI革命が到来し、それは最良の時代になるかもしれないし、最悪の時代になるかもしれない。それが良いこと...
ロシア新聞は1月19日、「もう隠せないのか?」と題する記事を掲載し、米スタンフォード大学の学者マイケ...
[[331789]]序文従来のデータの公開と共有の方法の多くは、生のデータをプレーンテキストで直接出...
[[283549]] Xipo/Textいつから始まったのかは分かりませんが、顔認証が普及し、「顔認...