返回介绍

solution / 2100-2199 / 2190.Most Frequent Number Following Key In an Array / README

发布于 2024-06-17 01:03:09 字数 4397 浏览 0 评论 0 收藏 0

2190. 数组中紧跟 key 之后出现最频繁的数字

English Version

题目描述

给你一个下标从 0 开始的整数数组 nums ,同时给你一个整数 key ,它在 nums 出现过。

统计 nums 数组中紧跟着 key 后面出现的不同整数 target 的出现次数。换言之,target 的出现次数为满足以下条件的 i 的数目:

  • 0 <= i <= n - 2
  • nums[i] == key 且
  • nums[i + 1] == target 。

请你返回出现 最多 次数的_ _target 。测试数据保证出现次数最多的 target 是唯一的。

 

示例 1:

输入:nums = [1,100,200,1,100], key = 1
输出:100
解释:对于 target = 100 ,在下标 1 和 4 处出现过 2 次,且都紧跟着 key 。
没有其他整数在 key 后面紧跟着出现,所以我们返回 100 。

示例 2:

输入:nums = [2,2,2,2,3], key = 2
输出:2
解释:对于 target = 2 ,在下标 1 ,2 和 3 处出现过 3 次,且都紧跟着 key 。
对于 target = 3 ,在下标 4 出出现过 1 次,且紧跟着 key 。
target = 2 是紧跟着 key 之后出现次数最多的数字,所以我们返回 2 。

 

提示:

  • 2 <= nums.length <= 1000
  • 1 <= nums[i] <= 1000
  • 测试数据保证答案是唯一的。

解法

方法一:遍历计数

我们用一个哈希表或数组 $cnt$ 记录每个 $target$ 出现的次数,用一个变量 $mx$ 维护 $target$ 出现的最大次数,初始时 $mx = 0$。

遍历数组 $nums$,如果 $nums[i] = key$,则 $nums[i + 1]$ 出现的次数 $cnt[nums[i + 1]]$ 加一,如果此时 $mx \lt cnt[nums[i + 1]]$,则更新 $mx = cnt[nums[i + 1]]$,并更新答案 $ans = nums[i + 1]$。

遍历结束后,返回答案 $ans$。

时间复杂度 $O(n)$,空间复杂度 $O(M)$。其中 $n$ 和 $M$ 分别为数组 $nums$ 的长度和数组 $nums$ 中元素的最大值。

class Solution:
  def mostFrequent(self, nums: List[int], key: int) -> int:
    cnt = Counter()
    ans = mx = 0
    for a, b in pairwise(nums):
      if a == key:
        cnt[b] += 1
        if mx < cnt[b]:
          mx = cnt[b]
          ans = b
    return ans
class Solution {
  public int mostFrequent(int[] nums, int key) {
    int[] cnt = new int[1001];
    int ans = 0, mx = 0;
    for (int i = 0; i < nums.length - 1; ++i) {
      if (nums[i] == key) {
        if (mx < ++cnt[nums[i + 1]]) {
          mx = cnt[nums[i + 1]];
          ans = nums[i + 1];
        }
      }
    }
    return ans;
  }
}
class Solution {
public:
  int mostFrequent(vector<int>& nums, int key) {
    int cnt[1001]{};
    int ans = 0, mx = 0;
    for (int i = 0; i < nums.size() - 1; ++i) {
      if (nums[i] == key) {
        if (mx < ++cnt[nums[i + 1]]) {
          mx = cnt[nums[i + 1]];
          ans = nums[i + 1];
        }
      }
    }
    return ans;
  }
};
func mostFrequent(nums []int, key int) (ans int) {
  cnt := [1001]int{}
  mx := 0
  for i, x := range nums[1:] {
    if nums[i] == key {
      cnt[x]++
      if mx < cnt[x] {
        mx = cnt[x]
        ans = x
      }
    }
  }
  return
}
function mostFrequent(nums: number[], key: number): number {
  const cnt: number[] = new Array(1001).fill(0);
  let ans = 0;
  let mx = 0;
  for (let i = 0; i < nums.length - 1; ++i) {
    if (nums[i] === key) {
      if (mx < ++cnt[nums[i + 1]]) {
        mx = cnt[nums[i + 1]];
        ans = nums[i + 1];
      }
    }
  }
  return ans;
}
class Solution {
  /**
   * @param Integer[] $nums
   * @param Integer $key
   * @return Integer
   */
  function mostFrequent($nums, $key) {
    $max = $maxNum = 0;
    for ($i = 0; $i < count($nums) - 1; $i++) {
      if ($nums[$i] == $key) {
        $hashtable[$nums[$i + 1]] += 1;
        $tmp = $hashtable[$nums[$i + 1]];
        if ($tmp > $max) {
          $max = $tmp;
          $maxNum = $nums[$i + 1];
        }
      }
    }
    return $maxNum;
  }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文