2010-05-23 3 views
0

40 개의 임의 요소 (모든 값은 0 또는 1)의 테이블을 채우는 1 차원 배열이 있습니다. 나는 값의 가장 긴 연속 범위를 찾고 싶다. 예를 들어1 차원 배열 계산 동일한 요소

:

1의 연속 4 개 값을 가지고 있기 때문에 111100101에서 가장 긴 행이 1111 될 것이다.

011100에서 결과는 111입니다.

"다음 요소"를 확인하고 0 또는 1인지 확인하는 방법을 모르겠습니다. 첫 번째와 마찬가지로 1111 (개수 4)이지만 다음은 0 값이되므로 의미가 있습니다. 카운트 중지.

제 아이디어는이 값 (4)을 다른 배열 (예 : 111100101)에 배치하고 1의 값을 0으로 되돌려 놓았습니다. 그리고 그 과정을 다시 시작하십시오.

가장 큰 값을 찾으려면 배열에있는 0의 1의 수를 추적하는 가장 큰 값을 검사하는 다른 방법을 만들었습니다. 이것은 문제가 아닙니다.

하지만 같은 종류 (0 또는 1)의 요소 그룹의 모든 값을 갖는 배열 tabelLdr을 채울 방법을 찾을 수 없습니다. 의와는 두 번째로 가지 않을 것이다 (물론 배열의 다음 값이있는 경우! = 현재 상태로 (0 인 또는 1).

확인하는 경우 만약 내가 2를 아래의 코드에서

루프 카운터가
public void BerekenDeelrij(byte[] tabel, byte[] tabelLdr) 
{ 
    byte LdrNul = 0, Ldréén = 0; 
    //byte teller = 0; 

    for (byte i = 0; i < tabel.Length; i++) 
    { 
     if (tabel[i] == 0) 
     { 
      LdrNul++; 
      //this 2nd if cleary does not work, but i have no idea how to implend this sort of idea in my program. 
      if (tabel[i] == 1) //if value != 0 then the total value gets put in the second array tabelLdr, 
      { 
       tabelLdr[i] = LdrNul; 
       LdrNul = 0 
      } 
     } 

     if (tabel[i] == 1) 
     { 
      Ldréén++; 
      if (tabel[i] == 0) 
      { 
       tabelLdr[i] = Ldréén; 
       Ldréén = 0; 
      } 
     } 

    }/*for*/ 
} 

답변

1

이 방법은 당신이 필요로하는 무엇을 수행해야합니다

public int LargestSequence(byte[] array) { 
    byte? last = null; 
    int count = 0; 
    int largest = 0; 
    foreach (byte b in array) { 
    if (last == b) 
     ++count; 
    else { 
     largest = Math.Max(largest, count); 
     last = b; 
     count = 1; 
    } 
    } 
    return Math.Max(largest, count); 
} 
0

에도 i 동안, 그것은 여전히 ​​변수입니다. 유효한 for 문이 무한 루프입니다 for (;;)입니다. i++에서와 for 문 단위 i을 알 수 있습니다. 표현이 i = i + 1 단지뿐만 아니라 작동 .

0

임은 0 또는 1의 사람의 가장 긴 "행"또는 긴 행을해야하는 경우가 후자의

var max = 0; 
var start = 0; 
var current = -1; 
var count = 0; 
for(int i = 0;i<table.Length;i++) 
{ 
    if(current = table[i]) 
    { 
     count++; 
    } 
    else 
    { 
     current = table[i]; 
     if(max < count) 
     { 
     max = count; 
     start = i-count; 
     } 
     count = 1; 
    } 
} 

if(max < count) 
     { 
     max = count; 
     start = i-count; 
     } 

위해 작동 확신 // max는 start에서 시작하는 행의 길이입니다.