carloscn / structstudy

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

leetcode2190: Most Frequent Number Following Key In an Array #355

Open carloscn opened 1 year ago

carloscn commented 1 year ago

Description

You are given a 0-indexed integer array nums. You are also given an integer key, which is present in nums.

For every unique integer target in nums, count the number of times target immediately follows an occurrence of key in nums. In other words, count the number of indices i such that:

0 <= i <= nums.length - 2, nums[i] == key and, nums[i + 1] == target. Return the target with the maximum count. The test cases will be generated such that the target with maximum count is unique.

Example 1:

Input: nums = [1,100,200,1,100], key = 1 Output: 100 Explanation: For target = 100, there are 2 occurrences at indices 1 and 4 which follow an occurrence of key. No other integers follow an occurrence of key, so we return 100.

Example 2:

Input: nums = [2,2,2,2,3], key = 2 Output: 2 Explanation: For target = 2, there are 3 occurrences at indices 1, 2, and 3 which follow an occurrence of key. For target = 3, there is only one occurrence at index 4 which follows an occurrence of key. target = 2 has the maximum number of occurrences following an occurrence of key, so we return 2.

Constraints:

2 <= nums.length <= 1000 1 <= nums[i] <= 1000 The test cases will be generated such that the answer is unique.

carloscn commented 1 year ago

Analysis

int32_t most_frequent(int32_t *nums, size_t nums_size, int32_t key)
{
    int32_t ret = 0;

    UTILS_CHECK_PTR(nums);
    UTILS_CHECK_LEN(nums_size);

    int32_t rom[2] = {0};
    int32_t max_freq = -1, freq[2] = {1};
    for (size_t i = 0; i < nums_size - 1; i ++) {
        rom[0] = nums[i];
        rom[1] = nums[i + 1];
        for (size_t j = i + 2; j < nums_size - 1; j ++) {
            if (rom[0] == nums[j] && rom[1] == nums[j + 1]) {
                freq[0] ++;
                if (max_freq <= freq[0]) {
                    max_freq = freq[0];
                    freq[1] = nums[j + 1];
                }
            }
        }
        freq[0] = 1;
    }

    ret = freq[1];

finish:
    return ret;
}
carloscn commented 1 year ago

Code

https://review.gerrithub.io/c/carloscn/structstudy/+/1169776 https://github.com/carloscn/structstudy/commit/de92a0d284a467e88e3d8e083c044f0c966769d6