毎日の洗練されたアルゴリズムは、提供します!オファー!オファー!
与えられた、0、1、...、nは見つけるためのシーケンス番号nは、0 - nが表示されない配列の数。
以下のような:
入力:[3、0、1]
出力:2
入力:8、5、4、6、7、1、0、2]
出力:3
この方法は:配列を命じ、及びアレイを通して、インデックス値がインデックス要素が削除され、時間の複雑さ、クイックドレーンO(nlogn)に対応していません
方法2:ビット
私たちは、XOR演算、X ^ X = 0、X ^ 0 = xを知っています
排他的OR演算、すなわち、X ^ Y ^ X = Y ^(X ^ X)= Y ^ 0 = Y、可換と連想されるような2 ^ 3 ^ 2 = 3 ^(2 ^ 2)= 3 ^ 0 3 =
これら二つの特性を利用して、問題(n)は時間の複雑O.で解決することができます
与える0から4まで、シーケンスのセットは、上記の凡例エレメント2が欠落していることは明らかである、と私たちならば下添字XORとの各要素は、それが結果を反復処理するときのようになります。
0 ^ 3 ^ 1 ^ 1 ^ 2 ^ 0 ^ 3 ^ 4 ^ 4 ^ 0 =(0 ^ 0)^(1 ^ 1)^(2 ^ 0)^(3 ^ 2)^(^ 4 4)= 2
私は、このようなXORが実際に要素2を行方不明になって期待していませんでした。それが与えられるので、この原則は、同様のDiminshingの音楽です0 - n個のシーケンスの要素が欠落し、その後、インデックス値に対応する配列は0 - nは(私たちは、添字のn個の要素が見える続きます値0を割り当てる要素を、(X ^ 0 = xが、結果には影響しません))欠落していますか、
したがって、この方法は、各要素の順序は、そのインデックスに等しい値を持ち、かつその等しい値を見つけることができませんシーケンス要素のインデックスで終わる必要があり、このインデックスは、我々が欠けている要素を求めているものです。
そして、排他的論理和演算が可換と連想ので、二二〇から一排除、最後の要素の削除は、プレースホルダを休ませるであるインデックス値、さらにXORが得られることを0とXORではありません不足している要素。(例えば、凡例2 ^ 0)
時間複雑:O(n)は、
方法3:数式
数分で答えることができるエヘン、この質問、別の人が学んだことがないかもしれプログラミングは、あなたが数式を使用することができます。
等差数列の和の公式を覚えていますか?0 - nは等差数列1の許容範囲であり、我々は式0-Nに応じてすべての要素の和の結果を取得し、その後、要素の削除を含む累積和シーケンスを横断することができ、最終的に、2つの減算装置が得られる天然の欠如であります要素
(OS内部の中学生:鶏肉料理)
......
時間複雑:O(n)は、
方法4:数式の最適化
チキン料理?N個の単純な方法3倍の値が整数オーバーフローになる場合nonono、演算シーケンスの総和式は、乗算を行います!
我々が考慮しなければならない問題である詳細については、。
ここで、ほぼ2アイデアや方法を最適化されているが、ここでビット操作を使用していないが、指標値は、各時間を減算した後、減算結果を加算し、加算と減算はまた、交換可能に組み合わされてもよいことは明らかです結果は、要素の結果として生じる欠如であり、整数オーバーフローの問題が表示されません。
ビンゴ!
方法は、かどうかを試験するために、図2に示されています。
(0-3)+(1-1)+(2-0)+(3-4)+(4-0)=(0-0)+(-3 + 3)+(1-1)+( 2-0)+(-4 + 4)= 2
注意:関係なく、添字の減損またはマイナス値インデックスがすることができますが、両者が混在していないところの!
さて、この時点では、今日、別の日には、コードを修正します。
以下からの参照:マイクロチャンネル公衆数labuladong(非マーケティングは、知識と原作者の尊重を掲載しました)