parent
152e710b69
commit
c2ff2076f4
@ -0,0 +1,26 @@
|
||||
package class_2023_01_1_week;
|
||||
|
||||
// 给你一个 严格升序排列 的正整数数组 arr 和一个整数 k 。
|
||||
// 请你找到这个数组里第 k 个缺失的正整数。
|
||||
// 测试链接 : https://leetcode.cn/problems/kth-missing-positive-number/
|
||||
public class Code01_KthMissingPositiveNumber {
|
||||
|
||||
public int findKthPositive(int[] arr, int k) {
|
||||
int l = 0;
|
||||
int r = arr.length - 1;
|
||||
int m = 0;
|
||||
int find = arr.length;
|
||||
while (l <= r) {
|
||||
m = (l + r) / 2;
|
||||
if (arr[m] - (m + 1) >= k) {
|
||||
find = m;
|
||||
r = m - 1;
|
||||
} else {
|
||||
l = m + 1;
|
||||
}
|
||||
}
|
||||
int preValue = find == 0 ? 0 : arr[find - 1];
|
||||
int under = preValue - find;
|
||||
return preValue + (k - under);
|
||||
}
|
||||
}
|
@ -0,0 +1,31 @@
|
||||
package class_2023_01_1_week;
|
||||
|
||||
// 一个正整数如果能被 a 或 b 整除,那么它是神奇的。
|
||||
// 给定三个整数 n , a , b ,返回第 n 个神奇的数字。
|
||||
// 因为答案可能很大,所以返回答案 对 10^9 + 7 取模 后的值。
|
||||
// 测试链接 : https://leetcode.cn/problems/nth-magical-number/
|
||||
public class Code02_NthMagicalNumber {
|
||||
|
||||
public static int nthMagicalNumber(int n, int a, int b) {
|
||||
// 求a和b的最小公倍数
|
||||
long lcm = (long) a / gcd(a, b) * b;
|
||||
long ans = 0;
|
||||
// l = 0
|
||||
// r = (long) n * Math.min(a, b)
|
||||
for (long l = 0, r = (long) n * Math.min(a, b), m = 0; l <= r;) {
|
||||
m = (l + r) / 2;
|
||||
if (m / a + m / b - m / lcm >= n) {
|
||||
ans = m;
|
||||
r = m - 1;
|
||||
} else {
|
||||
l = m + 1;
|
||||
}
|
||||
}
|
||||
return (int) (ans % 1000000007);
|
||||
}
|
||||
|
||||
public static int gcd(int a, int b) {
|
||||
return b == 0 ? a : gcd(b, a % b);
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue