2017-04-30 15 views
1

私は整数の配列を持っています。int[] Arr={1, 4, 7, 3, 2 }と言います。ここで、隣接する辺は2つの連続する数(配列の数ではない数の系)、すなわち1,2が隣接していることを意味する。私はコードのいくつかの行を書いて、私が短絡を見つけてそれを最適化するのを助けてください。Find配列の隣接要素間の最大距離

static void Main(string[] args) 
    { 
     int[] arr = { 1, 4, 7, 3, 2 }; 
     Console.WriteLine("adjacent indices with maximum value is {0}",Solution(arr)); 
     Console.ReadLine(); 
    } 

    static int Solution(int[] arr) 
    { 
     int maxDistance = -1; 
     int newMaxDistance = 0; 
     int a = 0, b = 0; 

     for (int i = 0; i < arr.Length; i++) 
     { 
      a = arr[i]; 
      if (i < arr.Length - 1) 
      { 
       b = arr[i + 1]; 
      } 

      for (int j = i + 1; j < arr.Length; j++) 
      { 

       if (arr[j] < b && arr[j] > a) 
       { 
        maxDistance = j - i; 
       } 
       else 
       { 
        newMaxDistance = j - i; 
       } 
      } 
     } 
     if (newMaxDistance > maxDistance) 
     { 
      maxDistance = newMaxDistance; 
     } 
     return maxDistance; 


    } 
+1

本当にこれがCコードであると確信していますか?それはC#のように見えます。 – mch

+0

はいこれはc#で書かれています –

+0

配列の隣接するペアに関しては、今日私は同じような問題がありました。もしC#の実装が見つかった場合は、https://github.com/htoma/codility/blob/master /codility/Code/AdjacentPairs.cs –

答えて

2

各要素を(値、場所などの)ペアに変換します。 {1,4,7,3,2} - > {(1,0)、(4,1)、(7,2)、(3,3)、(2,4)}である。次に、{(1,0)、(2,4)、(3,3)、(4,1)、(7,2)}の値でペアをソートします。その後、配列を通り、2つの連続した整数が見えるたびに、その位置の差を計算します。

0

各番号が1回しか表示されない場合は、各要素のインデックスをDictionaryの中に格納することができます。

したがって、1は配列の0番目の要素であるため、1の辞書は0になります。 7の辞書は配列の2番目の要素であるため、7の辞書は2になります。 (例として)

ここで、配列をループして、各要素の隣接する数字がディクショナリにあるかどうかを確認します。それらがディクショナリにある場合は、2つの数値のインデックスを減算し、絶対値を取る。あなたがチェックしたいあなたの例から、数3のインスタンスのためにそう

:(3は、配列の3番目の要素であるため)

数3のインデックスは3です。 数字2と4が辞書にあることを確認します。 (3に隣接) 2は辞書にあり、辞書は4を返します(2は配列の4番目の要素です)。 要素3(3)のインデックスと要素2(4)のインデックスを減算します。答えは-1の絶対値が1になります。

他の数字についてもこれを続けます。

関連する問題