carloscn / structstudy

Leetcode daily trainning by using C/C++/RUST programming.
4 stars 1 forks source link

leetcode2614: Prime In Diagonal #428

Open carloscn opened 12 months ago

carloscn commented 12 months ago

Description

You are given a 0-indexed two-dimensional integer array nums.

Return the largest prime number that lies on at least one of the diagonals of nums. In case, no prime is present on any of the diagonals, return 0.

Note that:

An integer is prime if it is greater than 1 and has no positive integer divisors other than 1 and itself. An integer val is on one of the diagonals of nums if there exists an integer i for which nums[i][i] = val or an i for which nums[i][nums.length - i - 1] = val.

image

In the above diagram, one diagonal is [1,5,9] and another diagonal is [3,5,7].

Example 1:

Input: nums = [[1,2,3],[5,6,7],[9,10,11]] Output: 11 Explanation: The numbers 1, 3, 6, 9, and 11 are the only numbers present on at least one of the diagonals. Since 11 is the largest prime, we return 11.

Example 2:

Input: nums = [[1,2,3],[5,17,7],[9,11,10]] Output: 17 Explanation: The numbers 1, 3, 9, 10, and 17 are all present on at least one of the diagonals. 17 is the largest prime, so we return 17.

Constraints:

1 <= nums.length <= 300 nums.length == numsi.length 1 <= nums[i][j] <= 4*106

carloscn commented 12 months ago

Analysis

static bool is_prime(int32_t num)
{
    int32_t n = num, i, flag = 0;

    for (i = 2; i <= n/2; ++ i)  {
        if (n % i == 0) {
            flag = 1;
            break;
        }
    }
    if (n <= 1) {
        flag = 1;
    }

    return flag == 0;
}

static int32_t diagonal_prime(int32_t nums[][3], size_t len)
{
    int32_t ret = 0;

    UTILS_CHECK_PTR(nums);
    UTILS_CHECK_LEN(len);

    ret = INT32_MIN;
    for (size_t i = 0; i < len; i ++) {
        if (is_prime(nums[i][i])) {
            ret = UTILS_MAX(nums[i][i], ret);
        }
        if (is_prime(nums[i][len - i - 1])) {
            ret = UTILS_MAX(nums[i][len - i - 1], ret);
        }
    }

finish:
    return ret;
}
carloscn commented 12 months ago

Code

https://review.gerrithub.io/c/carloscn/structstudy/+/1172527 https://github.com/carloscn/structstudy/commit/8af580ee89e4d7b29aa0748d8c855d96ea777e66