どのように私は配列からモード値を取得できますか?例えば、私が数の異なる配列を持っている場合、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;
}
事前計算値ごとに周波数を、おそらくマップまたは同様に、それらを格納し、これはあろうが依然として値をループすることを必要とし、どの周波数が最も高いかを決定するために別のループを必要とする。
これはそこに少しあり、そしてそれはパフォーマンスだについて、私は知らないが、あなたはJavaを使用し、ほとんどのGroovyを試して喜んでいたならば...長さの配列が必要です
static int modal(ArrayList values) {
use(Collections){
values.max{ values.frequency(it) }
}
}
これらのGroovyメソッド/クラスはJava内から使用できますか? (つまり、必要なのはGroovyのランタイムライブラリだけですか他の魔法がありますか?) –
groovy.jarが必要です。もしあなたのideがGroovyをサポートしているなら、Spring Tool SuiteやGroovy Eclipseプラグインをチェックしてください。 netbeansを使用した例は次のとおりです。http://netbeans.org/kb/docs/java/groovy-quickstart.html#groovy –
- 1. 取得値は、java
- 2. Javaでchar値を取得
- 3. はORG-モードのemacsにテーブル外の値を取得
- 4. Java CheckedComboBoxの値を取得する
- 5. 別のJavaクラスから値を取得
- 6. Java Swingでコンボボックスの値を取得
- 7. Tensorflowモードからテンソル値を取得する方法
- 8. JAVA、値の取得中のSQL例外
- 9. Java:プロパティファイルから値を取得する
- 10. MySqlデータベースからJavaに値を取得
- 11. 最高値を取得するjava ArrayList
- 12. Java:キー設定値を取得
- 13. 名前属性のJava取得値
- 14. Java/Android値の取得と保存
- 15. Java HashMapキー値の格納と取得
- 16. uefiモードでefiリターンコードを取得する
- 17. PyDAQmx取得モードをオンデマンドに設定
- 18. ExcelDnaでExcel計算モードを取得
- 19. Javaファイルの出力/値を読み取る処理の取得
- 20. Java - ArrayListの最大値と最小値を取得する
- 21. 自動モードでカメラの正確なホワイトバランスパラメータの値を取得する方法は?
- 22. spark列のgroupByでモード(多くの場合)値を取得する
- 23. Javaリフレクションサブクラスの変数値を取得する/メンバフィールドからオブジェクトインスタンスを取得する
- 24. Javaの静的モード
- 25. javaの別のメソッドでローカル変数の値を取得する
- 26. 別の列の値に基づいて列のモード値を取得しますか?
- 27. Javaを使用してOfficeLibreセルの値を取得する
- 28. Java ArrayList:HashMapを含むArrayListから別の値を取得
- 29. Javaスクリプトを使用してサーバーコントロールのプロパティ値を取得する
- 30. Cplexを使用してJavaで二重の値を取得
整数値の代わりにAtomicIntegerを使用して、数が128を超える場合にオブジェクト割り当ての数を減らすことができます。 –
この方法を決定する方法が似ています。解は実際にはfreqs.put(val、(freq == null?1:freq + 1))にあります。ありがとう... –