プログラムの要件は、n/2回にわたって発生する数値を配列に出力することです。解のアルゴリズムの実行時間がn log(n)であることを確認します。特定の数値が配列の半分以上を占めるかどうかを調べるためのn log(n)ランタイムを持つ解とは何か
[2、1、3、2] = Noの結果 [1、5 2、5、5] = 5
私の現在のソリューションない:これに関しては
int answer = -1;
int[] a = {2, 4, 2, 5, 1};
int[] occurances = {0, 0, 0, 0, 0, 0};
for(int i = 0; i < a.length; i++){
occurances[a[i]]++;
}
for(int i = 0; i < occurances.length; i++){
if(occurances[i] > ((double)a.length)/2){
answer = i;
}
}
System.out.println(answer);
、私のソリューションの実行時間は何ですか?私はそれが一度だけ配列を通過するので、それがn log(n)だとは思わない。
n log(n)でない場合、n log(n)を持つ解は何ですか? もしそうなら、それはなぜn長(n)ですか?
int [] a = {-2、-2、-2、-3};は何を返すべきですか? –
(* O(N)*)をソートしてスキャンします(* O(N)*)。 Still * O(N log(N))*。 「ダブル」へのキャストは無意味です。理論的には – EJP
-2である。すべての例が正の数しか与えなかったので、正の整数であると仮定して、基本的な問題を解決するのに十分なだけ与えました。 – Xenorosth