この質問はHackerRank上で見つけられました。ここでは、最小反復回数を見つけるはずでした(正の整数は、他の正の整数よりも約数が少ないそれ自身よりも)。 5.与えられた整数に対して最も小さい反復反復を見つけるためのより良いアルゴリズム
するよう、ユーザ入力5あれば6は、任意の数のB/W 1よりも多くの約数を有するように、次に最小antiprime数は、6であろう
私のアプローチ: - 各々に対して除数の数を格納ハッシュセット内の1からnまで、次にn + 1からは、ハッシュセット内の除数よりも多くの除数を持つ整数をチェックします。
public static int send(int n)
{
HashSet hs = new HashSet() ;
for(int i=1 ; i<=n ; i++)
{
hs.add(div(i)) ;
}
for(int i= n+1 ; ; i++)
{
if(Collections.max(hs).compareTo(div(i)) < 0)
{
return i ;
}
}
}
public static int div(int n)
{
int ctr = 0 ;
for(int i=1 ; i<=n ; i++)
{
if(n % i == 0)
ctr++ ;
}
return ctr ;
}
ロジックは完璧に動作しますが、私はそれはO(N^2)で見るように、すべてのテストケースでは、それは複雑以来、タイムアウトを返しました。
だから、私は比較的小さい時によく行うことができ、より良いアルゴリズムを、提案してください。
を、理由を言及してください。私はこの無礼を見つける。 –
スタックオーバーフローへようこそ... – kpie
div内のループは、nのsqrtまでしか上がらないようにしてください。 n個の* 2が余分に2倍だけでなく、n個のnと同じ要因を持っているので – kpie