2014-09-17 4 views
0

자바에서 2 차원 배열의 모드를 얻는 방법을 궁금해합니다. 문제를 해결할 수있는 몇 가지 다른 방법은 무엇입니까? 지금까지이 메소드에 대한 나의 코드가있다. 편집 : 또한, 배열은 긍정적이고 한 자리 숫자 그래서 0-9 포함 숫자에서 언급해야한다는 것을 잊어 버렸습니다.2d 배열의 모드를 얻는 방법

public static int getMostRepeatedNumber(int[][] array) { 
    int theMode = 0; 
    if(array.length < 0){ 
     return -1; 
    } 
    for(int row = 0; row <array.length;row++){ 
     for(int col = 0; col <array[0].length; col++){ 
      int temp = array[row][col]; 
     } 
    } 



    return theMode; 
} 
+0

드가? – Thihara

+0

'2 차원 배열의 모드'는 무엇을 의미합니까? – Rustam

+0

모드 : http://en.wikipedia.org/wiki/Mode_(statistics) –

답변

3

array 요소는 모두 단일 숫자 (0 ~ 9), 그래서 우리는 쉽게 때문에 길이 10

int[]freq = new int[10]; 
for(int[] row : array){ 
    for(int val : row) 
     freq[val]++; 
} 

int mode = 0; 
for(int i = 1; i < 10; i++) 
    if(freq[i] > freq[mode]) 
     mode = i; 

return mode; 
+0

+1 나를 이길 :) –

+0

@TedHopp 고마워 :) –

1

으로 배열 int[]freq를 사용하여 계산하고, 각 값의 주파수를 저장할 수 있기 때문에 0에서 9까지의 정수만 처리하는 것이 가장 쉬운 방법은 빈도 테이블을 작성한 다음 가장 큰 값을 검색하는 것입니다.

public static int getMostRepeatedNumber(int[][] array) { 
    if(array == null){ 
     return -1; 
    } 
    // build frequency table 
    int[] frequencies = new int[10]; // all zero 
    for(int [] row : array){ 
     for(int val : row){ 
      frequencies[val]++; 
     } 
    } 

    // scan for the largest value 
    int largest = 0; 
    int mode = -1; 
    for (int i = 0; i < 10; ++i) { 
     if (frequencies[i] > largest) { 
      largest = frequencies[i]; 
      mode = i; 
     } 
    } 

    return mode; 
}