2010-12-08 2 views
0
int[][] A = new int [n][]; 
for (int i=0; i<n; i++) { 
    if (i % 2 == 0) // i is a multiple of 2 
     A[i] = new int [n]; 
    else 
     A[i] = new int [1]; 
} 

for (int i=0; i<A.length; i++) 
    for (int j=0; j<A[i].length; j++) 
     sum = sum + A[i][j]; 

그래서 배열이 무엇을하는지 혼란스러워지고 있습니다. 첫 번째 행은 n 열로 2D 배열을 초기화합니다. 첫 번째 for 루프는 각 열을 찾습니다. 짝수 열이라면 그 열의 첫 번째 행에 n을 넣습니다. 이제는 2D 배열이어야하지만 하나의 브래킷만으로 참조되기 때문에 약간 혼란 스럽습니다. 루프 용 double과 같은 것. A.length와 A [i] .length의 차이점은 무엇입니까? 알다시피, for 루프는 배열을 반복하고 모든 요소의 합을 얻습니다. 내가 구문에 약간의 손실이 있기 때문에 누군가가 이것을 명확히 할 수 있습니까?이 코드와 런타임을 해독하는 데 도움이

또한 내 본능에 따르면이 코드는 O (n^2) 시간에 루프에 대한 이중으로 인해 최소한 실행됩니다. 그럴 것 같니?

+0

작성한 언어로 태그해야합니다. –

답변

1

A를 2D 배열 (일반적으로 직사각형이라고 생각하는)이 아니라 int 어레이의 배열로 생각하면 도움이 될 수 있습니다. 외부 배열에는 int 배열이 n 개 포함되어 있습니다. 각 배열은 다른 크기 일 수 있습니다. A[i] = new int [n] 실제로 어레이 A. A[i].length의 i 번째 요소의 크기 n의 배열이 배치되어 일 무엇

은 (배열의 길이는 A에 위치 I에서 O 약

본능을 저장 n^2)와 for 중첩 된 for 루프는 일반적으로 여기에서 정확합니다.

0

알고리즘이 불완전한 것 같습니다.

상단 부분은 모든 짝수 최상위 배열 요소 길이 n 및 갖도록 차원 어레이를 초기화마다 홀수 최상위 배열 요소의 길이를 통해 모든 후반 1.

, 외부 루프 반복을 갖는다 최상위 요소 그러한 요소가 n 개 있습니다. 각 요소에 대해 inner for 루프는 하위 요소를 합산합니다. 이러한 요소 중 n과 1이 번갈아 나타납니다.

Java 인 경우 기본적으로 모든 int [] 배열 요소의 내용은 0이됩니다. 사실이라면 최종 합계는 0이됩니다. 그러면 O (n * (n/2) + n)) = O (n^2).

관련 문제