単調に増加する数字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を上回る
グーグルは6月14日、欧州連合(EU)の主要データ規制当局がプライバシーに関する懸念を表明したため、...
[[257419]] 2018 年は人工知能 (AI) の主流採用をさらに促進し、より多くの機能の提...
7月10日、人材分析・計画会社Visierは、英国、米国、カナダ、ドイツの250社以上の企業の従業員...
[[264779]] AI と ML は誇張されすぎていて、if 文を書いたりプログラミングに関係す...
「平常時に努力しなければ、試験では友達に頼らざるを得なくなる」ということわざがある。試験が近づくに...
テクノロジー業界にとって、2018年は忘れられない年になる運命にある。結局、シェアサイクルのバブルは...
ChatGPTは一夜にしてまた進化し、OpenAIは一気に大量のアップデートをリリースしました!コ...
人工知能 (AI) システムは近年急速に普及しており、特に 2023 年には大規模言語モデル (LL...
[[205783]]近年 AI の利用が増えているため、利用可能な AI ツール、ライブラリ、プラッ...
翻訳者|朱 仙中レビュー | Chonglou導入通常、事前トレーニング済みの大規模言語モデル (L...
[[414747]]この記事はAI新メディアQuantum Bit(公開アカウントID:QbitA...