2016-12-20 4 views
-4

私が見た問題は以下の通りです。Judgecode - Array Prefix

http://judgecode.com/problems/1002

N整数Aの非空の配列が与えられると、A内のすべての数字は、サブアレイA [0..P]にあるような最小の整数Pを見つけてください。

+0

これらのパズルの背後にあるアイデアは、自分で作業することです。答えの種類を尋ねることは、パズルの目的を破るのですか? –

答えて

0

アレイのすべての項目をスキャンする必要があるため、少なくともO(N)アルゴリズムを実装する必要があります。 ハッシュセットを追加しながら配列をスキャンし、ハッシュセットサイズを増やすと(つまり、ユニークアイテムが追加されました)、アイテムのインデックスが記憶されます。記憶された最後のインデックスを返す

C#実装:

int[] sample = new [] { 2, 2, 1, 0, 1, }; 

Console.Write(MinIndex(sample)); 

結果は3ある

private static int MinIndex(IEnumerable<int> source) { 
    HashSet<int> used = new HashSet<int>(); 

    int index = -1; 
    int result = -1; 

    foreach (int item in source) { 
    index += 1; 

    if (used.Add(item)) // unique item added 
     result = index; // the last unique item's index so far 
    } 

    return result; 
} 

試験:初期アレイ{0, 1, 2}の全ての異なる項目が[2, 2, 1, 0]

あるサブアレイ [0..3]ています