アルゴリズムに関する質問があります。
サイズNの配列(すべての要素が整数であると仮定)が与えられた場合、最大のドロップ(必ずしも連続的である必要はありません)を見つけます:max {array [i] -array [j]}制約付き:i>j。
単純な解決策は、2つのループがあり、iとjのすべての可能な値を通過することですが、時間計算量はO(n * n)です。
そして、私が思う改善された解決策は、最初に配列のインデックスをマップし、配列をソートし、配列を調べて最大のドロップを見つけることです。この複雑さはO(nlogn)です。
線形時間計算量のソリューションはありますか?そしてどうやって?
PS:私はかつて線形ソリューションを考えていました:2つの追加の配列を作成します.1つは指定された配列の最大値を最初から最後まで記録し、もう1つは最小値を最後から最初まで記録することです。 2つの配列1つのパス。しかし、誰かが正しくないと思って、あまりにも大きなスペースを占めていました。だから私はより良い解決策を知りたいです。–lijuanliu