1362. 最接近的因数
问题1362 最接近的因数 ★☆☆☆☆
https://leetcode-cn.com/problems/closest-divisors/
这个题目我想到的就是暴力解法,抽象出一个计算某个数绝对值差最小的乘数对的方法,然后分别计算num+1和num+2的绝对值差最小的乘数对,然后比较它们哪个绝对值差更小。提交以后是没有问题的,不过效率是差了点。额,看了下官方题解,基本是一样的思路。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
public int[] closestDivisors(int num) {
int target1 = num + 1;
int target2 = num + 2;
int[] divisors1 = minDiffDivisors(target1);
int[] divisors2 = minDiffDivisors(target2);
if (Math.abs(divisors1[0] - divisors1[1]) < Math.abs(divisors2[0] - divisors2[1])) {
return divisors1;
} else {
return divisors2;
}
}
private int[] minDiffDivisors(int num) {
int max = (int) Math.floor(Math.sqrt(num));
int minDiff = Integer.MAX_VALUE;
int[] ret = new int[2];
for (int i = 1; i <= max; i++) {
if (num % i == 0) {
int j = num / i;
int curDiff = Math.abs(i - j);
if (curDiff < minDiff) {
minDiff = curDiff;
ret[0] = i;
ret[1] = j;
}
}
}
return ret;
}
本文由作者按照 CC BY 4.0 进行授权