배열에서 모드 값을 얻으려면 어떻게해야합니까? 예를 들어 차이 개수가있는 배열이있는 경우 Java를 사용하여 가장 많이 나타나는 숫자를 검색하려면 어떻게해야합니까?Java에서 모드 값 가져 오기
답변
O (n^2)와는 대조적으로 O (n)에서 완료됩니다. > 0
public static int getMode(int[] values) {
HashMap<Integer,Integer> freqs = new HashMap<Integer,Integer>();
for (int val : values) {
Integer freq = freqs.get(val);
freqs.put(val, (freq == null ? 1 : freq+1));
}
int mode = 0;
int maxFreq = 0;
for (Map.Entry<Integer,Integer> entry : freqs.entrySet()) {
int freq = entry.getValue();
if (freq > maxFreq) {
maxFreq = freq;
mode = entry.getKey();
}
}
return mode;
}
비효율적 인 알고리즘이기는하지만, 기본은 무언가 같이 될 것이다 : 당신은에 의해 조금 더 잘 할 수
static int modal(int[] values) {
int modal = 0;
int mfreq = 0;
for(int i : values) {
// Is this value the most frequent we've found so far?
int freq = 0;
for(int j : values) {
if(j == i) {
freq++;
}
}
if(freq > mfreq) {
modal = i;
mfreq = freq;
}
return modal;
}
미리 계산 각 값에 대해 주파수를 아마도지도 또는 유사한에서 그들을 저장,이 것이지만 여전히 값을 통해 루핑 할 필요가 있으며 가장 높은 빈도를 가진 루프를 결정하는 또 다른 루프가 필요합니다.
이 밖에 조금, 그리고 성능의에 대해 잘 모르겠지만, 당신이 당신의 자바 조금 그루비를 시도 할 의사가 있다면 ... 길이의 배열을 필요
static int modal(ArrayList values) {
use(Collections){
values.max{ values.frequency(it) }
}
}
그루비 메서드/클래스를 Java 내에서 사용할 수 있습니까? (즉, Groovy 런타임 라이브러리가 필요하거나 다른 마법이 필요합니까?) –
Groovy.jar 만 있으면됩니다. 당신의 ide가 그루비를 지원한다면 (Spring Tool Suite 및/또는 Groovy eclipse 플러그인을 확인하십시오) 도움이됩니다. 다음은 netbeans를 사용한 예입니다. http://netbeans.org/kb/docs/java/groovy-quickstart.html#groovy –
- 1. Java에서 TIFF 이미지의 픽셀 값 가져 오기
- 2. Java에서 FQDN 가져 오기
- 3. Java에서 창 가져 오기
- 4. Java에서 아키텍처 가져 오기
- 5. iframe에서 값 가져 오기
- 6. XML 값 가져 오기?
- 7. Python에서 값 가져 오기
- 8. CFDictionary에서 값 가져 오기
- 9. Json.net에서 값 가져 오기
- 10. NSString에서 값 가져 오기
- 11. jtable에서 값 가져 오기
- 12. ImageView 값 가져 오기
- 13. 위치에서 값 가져 오기
- 14. regexp에서 값 가져 오기
- 15. 배열에서 값 가져 오기
- 16. 가져 오기 값
- 17. 파이썬 모드 가져 오기 문제
- 18. Java에서 BIOS 시간 가져 오기
- 19. Java에서 달 이름 가져 오기
- 20. Java에서 인터넷에서 데이터 가져 오기
- 21. Java에서 기본 게이트웨이 가져 오기
- 22. 값 객체의 객체에서 값 가져 오기 [4,4]
- 23. 키/값 쌍의 목록 값 가져 오기
- 24. dropdownlist에서 값 가져 오기 UrlHelper에서 값 사용
- 25. 첫 번째 값 쌍의 값 가져 오기
- 26. DataView에서 값 가져 오기 C#
- 27. jquery에서 div 값 가져 오기?
- 28. Oracle 테이블에서 값 가져 오기
- 29. AS3 - 문자열 값 가져 오기
- 30. GEvent에서 "i"값 가져 오기
정수 값 대신 AtomicInteger를 사용하면 개수가 128보다 많으면 개체 할당 수가 줄어 듭니다. –
이 방법을 사용하면 모드를 결정하는 것이 좋습니다. 솔루션은 실제로는 freqs.put (val, (freq == null? 1 : freq + 1)); 감사합니다 ... –