1362. Closest Divisors

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]};
    }
}

Or reduced version

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};
    }
}

 

Guess you like

Origin www.cnblogs.com/wentiliangkaihua/p/12349210.html