Skip to content

Latest commit

 

History

History
55 lines (46 loc) · 1.33 KB

Question_1390.md

File metadata and controls

55 lines (46 loc) · 1.33 KB

LeetCode Records - Question 1390 Four Divisors

Attempt 1: Use an int[] as a cache

class Solution {

    public int sumFourDivisors(int[] nums) {
        int[] cache = new int[100001];
        int sum = 0;

        for (int num : nums) {
            if (cache[num] == 0) {
                int[] numOfDivisors = getNumOfDivisors(num);
                if (numOfDivisors[0] == 4) {
                    cache[num] = numOfDivisors[1];
                    sum += numOfDivisors[1];
                } else {
                    cache[num] = -1;
                }
            } else if (cache[num] > 0) {
                sum += cache[num];
            }
        }

        return sum;
    }

    private int[] getNumOfDivisors(int num) {
        int numOfDivisors = 0;
        int sumOfDivisors = 0;

        int num1 = 1;
        int num2 = num;
        while (num1 < num2) {
            if (num % num1 == 0) {
                numOfDivisors += 2;
                sumOfDivisors += num1 + num2;
            }

            num1++;
            num2 = num / num1;
        }
        if (num1 == num2 && num % num1 == 0) {
            numOfDivisors++;
            sumOfDivisors += num1;
        }

        return new int[]{ numOfDivisors, sumOfDivisors };
    }
}
  • Runtime: 37 ms (Beats: 41.78%)
  • Memory: 45.04 MB (Beats: 34.02%)