2014-10-07 2 views
0

에서 모달 수를 찾기 :이 같은 배열을 배열

int[] array = { 2, 4, 6, 8, -3, 8, 2, 7, 2, 4 }; 

I (이 경우 물론 그 2) 가장 많은 시간을 표시하는 번호를 알고 싶어, 내가 어떻게 할 수 있습니까?

+0

int []에서 Java라고 말하고 싶습니다. – NoDataFound

답변

0

지도 매핑 int 수를 계산할 수 있습니다. Java에서는 HashMap<Integer, Integer>과 같은 것입니다. 목록을 살펴보고 int가 이미지도에 있는지 확인하십시오. 그렇다면 숫자에 1을 더하고 그렇지 않으면 1로 초기화하십시오. 그 후에지도를 다시 방문하여 가장 많은 숫자가있는 번호를 찾으십시오.

0

빈도 분포를 생성하고 배열을 반복해야합니다. 정수를 사용함에 따라 키로 직접 사용할 수 있으므로 쉽게 사용할 수 있습니다.

HashTable frequencyDistribution = new HashTable(); 
for(int i=0; i<array.length; i++) { 
    int key = array[i]; 
    if(!frequencyDistribution.containsKey(key)) frequencyDistribution.add(key, 0); 
    frequencyDistribution[ key ]++; 
} 
int modeKey; 
int modeCnt = int.MIN; 
foreach(int key in frequencyDistribution.keys) { 
    int cnt = frequencyDistribution[key]; 
    if(cnt > modeCnt) modeKey = key; 
} 
print("Most frequent is: {0} as it appears {1} times.", modeKey, modeCnt); 
2

나는 아래 코드는 자바 트릭을 할 것 같아요 8.

int[] array = { 2, 4, 6, 8, -3, 8, 2, 7, 2, 4 }; 
Arrays.stream(array).collect(Collectors.groupingBy(s -> s)) 
     .forEach((k, v) -> System.out.println(k + ": " + v.size())); 

인쇄 :

2: 3 
4: 2 
8: 2 
6: 1 
7: 1 
-3: 1 
+0

'toString()'호출은 필요하지 않습니다. – VGR

+0

@ VGR, thanks .. 게시물을 업데이트 할 예정입니다. – brunsgaard

0
단계를 작성 버킷 종류의 버킷을 사용할 수 있습니다

다음 선형 모든 스캔 버킷을 사용하여 가장 자주 나타나는 숫자를 얻을 수 있습니다 (배열에서 최대 수를 얻는 방법을 알고 있습니까?). 기본 데이터 구조는 배열 (가장 빠름) 일 필요는 없지만 BIG 범위의 경우 메모리 제약으로 인해 배열을 사용할 수 없으며 속도가 느려지므로 키 - 값 메커니즘이있는 모든 것을 사용할 수 있습니다 시간을 실행.

1

는이 같은 알고리즘을 수행 할 수 있습니다

Map<Integer, Integer> frequencies = new HashMap<>(); 
for (int n : array) { 
    frequencies.put(n, frequencies.getOrDefault(n, 0) + 1); // Java 8 
} 

if (!frequencies.isEmpty()) { 
    Integer bestMatch = null; 
    Integer lastCount = null; 
    for (Map.Entry<Integer,Integer> entry : frequencies.entrySet()) { 
    Integer count = entry.getValue(); 
    if (null == lastCount || count > lastCount) { 
     bestMatch = entry.getKey(); 
     lastCount = count; 
    } 
    } 
    System.out.println("Most frequent value: " + bestMatch + " (found " + lastCount + " times)"); 
} 
  • 우리는 첫번째 횟수를 계산 값이
  • 우리는지도의 최대 값을 선택하고 관련된 키를 저장 나타납니다.
0
  1. 정렬 전에 먼저
  2. 지금 루프에 가서 그렇게 반복있어 시간의 수를 계산하고 세부 정보를 저장하는 경우 수는
  3. 를 반복되는지 확인합니다.
  4. 같은 일을 반복합니다. 다른 번호가 더 많은 카운트를 가지고 있다면 당신은 새로운 번호로 저장 한 세부 정보를 교체하십시오. 숫자와 개수와 같은 세부 사항을 별도의 변수에 저장할 수 있습니다.