給定兩個整數陣列(例如)X = [1, 1, 1, 7, 7, 7]并Y = [1, 1, 1, 8, 8, 8]找到分數形式為的最高出現分數的出現次數X[i]/Y[i]是一個問題,我們可以使用 HashTable 來解決該問題以避免O(N^2)復雜性。
如何插入(key, value)鍵可能包含多個值的條目?如果我宣告一個類Fraction,那么參考將被散列并且它將不起作用。我使用的解決方法是將分數表示為連接的字串X[i],Y[i]但我想知道是否有更好的方法來做到這一點。
static int maximumOccuringFraction(int[] X, int[] Y) {
HashMap<String, Integer> freq = new HashMap<String, Integer>();
int res = 1;
for(int i = 0; i < Y.length; i ) {
int n = X[i];
int d = Y[i];
String s = String.valueOf(n) String.valueOf(d);
if(freq.containsKey(s)) {
res = Math.max(res, freq.get(s) 1);
freq.put(s, freq.get(s) 1);
}
else {
freq.put(s, 1);
}
}
return res;
}
提前致謝。
uj5u.com熱心網友回復:
您應該有一個覆寫等于和哈希碼的分數類
以下是您可以執行的操作:
public class Fraction {
int numerator, denominator;
public equals(Object o) {
if (o instanceof Fraction) {
Fraction f = (Fraction) o;
return f.numerator == numerator && f,denominator == denominator;
}
return false;
}
public int hashCode() {
return numerator * denominator * denominator;
}
}
現在在你的 Map 中使用這個 Fraction 類
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/422240.html
標籤:
下一篇:使用執行緒將記錄保存到資料庫
