Given an integer num
, find the closest two integers in absolute difference whose product equals num + 1
or num + 2
.
Return the two integers in any order.
Example 1:
Input: num = 8 Output: [3,3] Explanation: For num + 1 = 9, the closest divisors are 3 & 3, for num + 2 = 10, the closest divisors are 2 & 5, hence 3 & 3 is chosen.
Example 2:
Input: num = 123 Output: [5,25]
Example 3:
Input: num = 999 Output: [40,25]
class Solution { public int[] closestDivisors(int num) { int l1 = num + 1; int l2 = num + 2; int n1 = (int) Math.sqrt(num + 1); int n2 = (int) Math.sqrt(num + 2); int nn1 = Integer.MAX_VALUE; int nn2 = Integer.MAX_VALUE; int[] arr = new int[4]; for(int i = n1; i >=1 ; i--){ if(l1 % i == 0 && nn1 > Math.abs(i - l1/i)){ nn1 = Math.abs(i - l1/i); arr[0] = i; arr[1] = l1 / i; } } for(int i = n2; i >=1 ; i--){ if(l2 % i == 0 && nn2 > Math.abs(i - l2/i)){ nn2 = Math.abs(i - l2/i); arr[2] = i; arr[3] = l2 / i; } } if(nn1 < nn2) return new int[]{arr[0], arr[1]}; else return new int[]{arr[2], arr[3]}; } }
或者缩减版
class Solution { public int[] closestDivisors(int num) { int[] v1 = calculateClosestFactors(num+1); int[] v2 = calculateClosestFactors(num+2); return v1[1]-v2[0]<v2[1]-v2[0]?v1:v2; } private int[] calculateClosestFactors(int num) { int sqrt = (int)(Math.sqrt(num)); for (int v1=sqrt;v1>=1;v1--) { int v2 = num/v1; if(num%v1==0 && num%v2==0) { return new int[]{v1,v2}; } } return new int[]{0,Integer.MAX_VALUE}; } }
原文:https://www.cnblogs.com/wentiliangkaihua/p/12349210.html