2013-02-21 1 views
-1

나는 정수 배열을 가지고 있으며 같은 정수 값을 가진 하나 이상의 요소가 있습니다. 다른 정수 중에서 대다수의 정수 값을 식별하고 싶습니다. 이것이 어떻게 완성 된 것입니까?자바의 배열에서 다수 멤버를 식별하는 방법

+3

다수의 정수를 정의하십시오. 그 숫자가 다른 어떤 것보다 더 많이 발견 되었습니까? 아니면 정수 ** ** 함께 ** 모든 다른 걸릴 **보다 더 많은 시간을 찾을 수 ** –

+0

[선형 시간 대다수 알고리즘의 가능한 중복?] (http://stackoverflow.com/questions/4280450/linear-time-majority-algorithm) – amit

+0

아, 알겠습니다. 무시합니다. – 75inchpianist

답변

2

"최적"솔루션을 찾고있는 경우 확실하지 않지만 아래 코드는 작동합니다.

방법 :

public static Integer majority(int[] array) { 
    Map<Integer, Integer> count = new HashMap<Integer, Integer>(); 
    for (int number : array) { 
     if (count.containsKey(number)) { 
     count.put(number, count.get(number) + 1); 
     } else { 
     count.put(number, 1); 
     } 
    } 
    Integer majority = null; 
    Integer majorityCount = null; 
    for (Integer key : count.keySet()) { 
     if (count.get(key) > array.length/2) { 
     majority = key; 
     majorityCount = count.get(key); 
     } 
    } 
    return majority; 
} 

여기 테스트 주자 :

public static void main(String[] args) { 
    int[] array = {0, 1, 3, 4, 2, 1, 0, 0, 0, 10, 10, 0, 0}; 
    int[] array1 = {0, 1, 3, 4, 2, 1, 0, 0, 0, 0, 0}; 
    System.out.println(majority(array)); 
    System.out.println(majority(array1)); 
} 

그리고 출력

null 
0 

나는 이것이 당신이 찾고있는 무엇인가를 바란다.

1

아래 코드는 대부분의 정수가 무엇이며 배열에 나타난 횟수를 알려줍니다. 분명히 내가 물어 보지 않았기 때문에 솔루션을 최적화하는 것을 보지 못했다.

int array[] = new int[10]; 

    array[0] = 0; 
    array[1] = 9; 
    array[2] = 1; 
    array[3] = 2; 
    array[4] = 3; 
    array[5] = 6; 
    array[6] = 7; 
    array[7] = 8; 
    array[8] = 5; 
    array[9] = 4; 

    HashMap map = new HashMap(); 

    int majorInt = 0; 
    int maxCounter = 0; 
    boolean majorIntFound = false; 

    for (int i = 0; i < array.length; i++) { 
     Integer counter = (Integer) map.get(array[i]); 

     if (counter != null) { 
      majorIntFound = true; 
      int counterInt = counter.intValue(); 

      map.put(array[i], ++counterInt); 

      if (counterInt > maxCounter) { 
       maxCounter = counterInt; 
       majorInt = array[i]; 
      } 

     } else { 
      map.put(array[i], new Integer(1)); 
     } 

    } 
    if (majorIntFound) 
     System.out.println(" Majority int is: " + majorInt + " counter: " + maxCounter); 
    else 
     System.out.println("No majority Int"); 
0

나는 당신이 뭔가를 원합니까?

import java.util.Random; 
public class Majority{ 
    public static void main(String [] args){ 

     int [] random = new int[100]; 
     Random r = new Random(); 
     for (int i : random){ 
      int j = r.nextInt(21); 
      random[i] = j; 
     } 

     int majority = 0, currentCount = 0, highestCount = 0; 
     for (int i : random){ 
      for (int j : random){ 
       if(random[i] == random[j]) 
        currentCount++; 
      }  
      if(currentCount > highestCount){ 
       majority = random[i]; 
       highestCount = currentCount; 
      } 
     } 
     System.out.print("The majority number is: " + majority); 
    } 
} 
+0

내 코드는 다수 요소가 아니라 대부분 발생하는 숫자를 계산합니다. 영업 이익은 다수를 정의하지 않았으므로 나는 그것이 무엇인지에 대해 착각했습니다. 이는 생각보다 절반 만에 발생하는 요소입니다. – ChrisWilson4

관련 문제