我在HackerRank上找到了這個問題,我們應該在這裏找到最小的AntiPrime數(正整數是antiprime當且僅當它有更多的除數比任何其他正整數小比本身)。找到給定整數的最小Antiprime的更好算法
因此,如果用戶輸入5,則最小antiprime數目將是6,如圖6具有比任何數目的約數的B/W爲1〜5
我的方法: - 存儲除數對於每個數編號1到n在一個散列集中,然後從n + 1檢查具有比HashSet中的更多除數的整數。
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)。
所以,請給我一個更好的算法,這個算法可以在相對較短的時間內完成。
對於人們downvoting問題,請註明原因。我覺得這很無禮。 –
歡迎來到堆棧溢出... – kpie
您的循環div應該只能達到n的sqrt。 – kpie