LeetCode878. 第 N 個神奇數字(java)
題目
https://leetcode-cn.com/problems/nth-magical-number/description/
思路
這題我首先覺得這個模的數怎麼這麼奇怪,然後查了一下說,這個是int裡最大的質數~那麼肯定和題目無關了。
如果按最簡單的思路就是一個個加上去試的話目測會超時,因為如果N,A,B都取最大值,那就是要加到40000*10^9!!
先從A = 2,B = 3找規律:
以A = 2,B = 3為例,隨著N遞增有 2,3,4(22),6(A,B的最小公倍數),8(24),9(3*3)…
然後(嗯!要有點靈感)就發現 假設最後的值為 res ,此時個數 N = res/A + res/B - res/(A,B的最小公倍數)
那麼當對於一個數k來說它的 個數k 如果小於N,那麼res肯定在它的右邊,否則在它的左邊。這裡我們再用2分的方式逼近res。
當k = N時,我們就命中了想要的那個數了,再對結果進行取模。
程式碼
import java.math.BigDecimal;
class Solution {
public int nthMagicalNumber(int N, int A, int B) {
/**
* 假設最後的值為 res ,此時 N = res/A + res/B - res/(A,B的最小公倍數)
* 以A = 2,B = 3為例,隨著N遞增有 2,3,4(2*2),6(A,B的最小公倍數),8(2*4),9(3*3)...
*/
int g = A*B/gcd(A,B);//最小公倍數 = A*B / 最大公約數
long min = 0;
long max = 40000000000000L;
while(min < max){
long mid = min + ((max - min) / 2);
long temp = mid / A + mid / B - mid / g;
if(temp < N){
min = mid + 1;
}else {
max = mid;
}
}
return (int)(max % 1000000007);
}
public int gcd(int a,int b){
return b == 0 ? a : gcd(b,a%b);
}
}
相關文章
- Nth Digit 第N個數字Git
- 字首和的n個神奇操作
- Java語言非遞迴求第n個斐波那契數Java遞迴
- CSS 倒數第n個li元素樣式CSS
- LeetCode 1137第N個斐波那契數LeetCode
- LeetCode 1137[第N個泰波那契數]LeetCode
- NFT數字藏品:神奇數碼藏品
- L1-050 倒數第N個字串 (15分)字串
- 166. 連結串列倒數第n個節點
- 輸入N,再輸入N個數,N
- 2022-07-17:1、2、3...n-1、n、n、n+1、n+2... 在這個序列中,只有一個數字有重複(n)。 這
- 0011 刪除連結串列的倒數第N個節點
- JavaScript 獲取第n個li元素JavaScript
- jQuery查詢第n個li元素jQuery
- CSS 第N個子元素樣式CSS
- 19. 刪除連結串列的倒數第 N 個結點
- LeetCode 連結串列專題 19 刪除倒數第n個數 java 遞迴解法 幾乎雙百 思路簡單LeetCodeJava遞迴
- 寫一個方法,傳入數字x,從一個一維陣列裡找到兩個數字符合“n1 + n2 = x”陣列
- LeetCode- 19 刪除連結串列的倒數第N個節點LeetCode
- 題19. 刪除連結串列的倒數第N個節點
- Leetcode No.19 刪除連結串列的倒數第N個節點LeetCode
- Java斐波那契數列的第n項(從0開始,第0項為0,第1項是1)。Java
- 快排思想O(N)求第k大數
- n個骰子的點數
- CSS設定第n個li元素樣式CSS
- CSS 設定第n個li元素樣式CSS
- 獲取陣列第N個元素的方法陣列
- 2020-10-18 刪除連結串列的倒數第N個節點
- 指標-n個數的排序指標排序
- 3070 n個整數“打擂臺”
- 2024.9.6 leetcode 1137 第 N 個泰波那契數 (雜湊表/動態規劃)LeetCode動態規劃
- 【LeetCode】1304. 和為零的N個唯一整數(Java)LeetCodeJava
- L1-009 N個數求和
- 3069 求n個整數的和
- leetcode每日一題—19.刪除連結串列的倒數第N個結點LeetCode每日一題
- 統計整數區間[N,M](N,M<100000)中所以非偶數的合數個數,並輸出這個數。
- 【JAVA習題六】輸入兩個正整數m和n,求其最大公約數Java
- 菲波那契數——根據輸入資料中的n,輸出第n項菲波那契數