2017-04-30 1 views
1

정수 배열을 가지고 있습니다. int[] Arr={1, 4, 7, 3, 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)}의 값으로 쌍을 정렬합니다. 그런 다음 배열을 살펴보고 연속 된 두 개의 정수를 볼 때마다 각 위치의 차이를 계산하십시오.

0

각 숫자가 한 번만 나타나는 경우 각 요소의 색인을 Dictionary 안에 저장할 수 있습니다.

따라서 1은 배열의 0 번째 요소이기 때문에 숫자 1의 사전은 0과 같습니다. 7이 배열의 두 번째 요소이기 때문에 7의 사전은 2가됩니다. (예를 들어)

이제 배열을 반복하고 각 요소의 인접한 숫자가 사전에 있는지 확인하십시오. 그들이 사전에 있다면 두 숫자의 색인을 빼고 절대 값을 취하십시오.

그래서 귀하의 예제에서 숫자 3에 대한 예를 들어 당신은 확인할 것 :

숫자 3의 인덱스가 3 (3 배열의 세 번째 요소이기 때문에). 숫자 2와 4가 사전에 있는지 확인합니다. (3에 인접) 2가 사전에 있으므로 Dictionary는 4를 반환합니다 (2는 배열의 네 번째 요소이므로). 요소 3 (3)의 인덱스와 요소 2 (4)의 인덱스를 뺍니다. 대답은 -1의 절대 값 1이 될 것입니다.

다른 숫자에도이 작업을 계속하십시오.