2013-02-24 2 views
0

다음 메서드는 정수 목록에서 가장 긴 정렬 된 시퀀스의 길이를 반환해야합니다. 예를 들어, list라는 변수에 {11,12,30,41,5,3,7,6} 값 시퀀스가 ​​저장되면 4을 반환해야합니다.Java (ArrayList)

가장 긴 정렬 순서가 맨 앞에서 시작되면이 메서드는 테스트에 실패하고 (3 반환) 다른 테스트에서는 작동합니다. 문제가 어디 있는지 아는 사람 있습니까? 고맙습니다.

public int longestSortedSequence() { 

    int count = 0; 
    int max1 = 0; 
       int max2 = 0; 

    for (int i = 0; i < size; i++) { 
     if (elementData[i] <= elementData[i + 1]) { 
      count++; 
      if (count >= max1) { 
       max1 = count; 

      } 
     } else if (elementData[i] > elementData[i + 1]) { 
      count = 0; 
      count++; 
      if (count >= max2) { 
       max2 = count; 
      } 
     } 
    } 
    return Math.max(max1, max2); 
} 
+2

왜 이것이 Java와 C#으로 표시되어 있습니까? –

+0

elementData는 어떻게 선언됩니까? 이것이 ArrayList와 어떤 관련이 있습니까? –

+0

public class ArrayIntList { private int [] elementData; 개인용 int 크기; } –

답변

1

두 의견 : 각 i를 들어

  1. , 당신은 요소 i+1 현재 비 감소 시퀀스를 계속할지 여부를 테스트하고 있습니다. 따라서 루프의 첫 번째 반복 전에 요소 0이 현재 비 감소 시퀀스에 속하는 것으로 계산해야합니다. 첫 번째 반복에서 요소 1이 해당 시퀀스를 계속 수행하는지 테스트합니다. 즉, 처음에는 count을 1로 설정해야합니다.

  2. i+1은 배열에 유효한 색인이 아니기 때문에 코드는 for 루프의 마지막 반복에서 ArrayIndexOutOfBoundsException을 던질 수 있습니다.

+0

당신의 도움에 감사드립니다. 알았다! –

0
  • 나는 당신의 문제의 코드는 복사 - 붙여 넣기를 많이했다 같아요. 예 : if (count>=max) 부분.

  • 귀하의 코드는 당신이 당신의 루프에서 e[i+1]을 읽을 수 있기 때문에 IndexOutOfBoundExcep.을 던져 조건 i<size

  • 로 설정할 수있다 count 배열이 비어 있지 않은 경우 적어도 1, (정렬 경우 내림차순)이어야한다. 배열이 비어있는 경우 0을 반환합니다.

방금 ​​수정 한 사항을 다시 작성했습니다. (IDE에서 작성하지 않고 테스트하지 않음). 그냥 몇 가지 아이디어를 보여주십시오.

public int longestSortedSequence() { 
    if (size==0)return 0; //empty array 
    int count = 1; //at least 1 
    int max = 1; 
    for (int i = 0; i < size-1; i++) { 
     if (elementData[i] <= elementData[i + 1]) { 
      count++;   
     } else { 
      max=count>max?count:max; 
      count = 1; 
     } 
    } 
    return count>max? count: max; 
}