LeetCode(229):Majority Element ||
发布日期:2025-04-05 02:23:50 浏览次数:9 分类:精选文章

本文共 1196 字,大约阅读时间需要 3 分钟。

要解决这个问题,我们需要找出数组中出现次数超过三分之一的元素。这种情况下,最多只能有两个元素符合条件。

方法思路

我们可以通过遍历数组并跟踪可能的候选元素来解决这个问题。具体步骤如下:

  • 初始化两个变量来记录两个潜在的候选元素,并且各自的计数器。
  • 遍历数组,对于每个元素,根据当前的候选元素进行计数,如果当前元素不是候选的任何一个,则开始一个新的计数。
  • 如果某个候选的计数变为零,则换成当前元素作为新的候选,并进行计数。
  • 遍历结束后,检查这两个候选元素的计数器是否超过数组长度的三分之一,结果即为所求。
  • 解决代码

    def majorityElement(n_nums):    a, b = -1, -1    cnt_a, cnt_b = 0, 0    for num in n_nums:        if num == a:            cnt_a += 1        elif num == b:            cnt_b += 1        else:            if cnt_a == 0:                a = num                cnt_a = 1            elif cnt_b == 0:                b = num                cnt_b = 1            else:                if num == a:                    cnt_a -= 1                else:                    cnt_b -= 1    result = []    threshold = len(n_nums) // 3    if cnt_a > threshold:        result.append(a)    if cnt_b > threshold:        result.append(b)    return result# 测试用例nums = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 5]print(majorityElement(nums))  # 输出: [3, 5]

    代码解释

  • 初始化变量ab初始化为-1,表示尚未找到候选元素。cnt_acnt_b用于记录每个候选元素的计数。
  • 遍历数组:遍历每个元素,根据当前的计数状态更新候选元素和计数器。
  • 更新候选元素:当遇到新的元素时,检查当前候选元素的计数状态,如果某个候选消失,则替换为当前元素。
  • 验证结果:在遍历结束后,检查每个候选元素的计数器是否超过三分之一数组长度,符合条件的元素加入结果列表。
  • 这种方法确保了线性时间和O(1)空间复杂度,能够高效地解决问题。

    上一篇:leetcode--
    下一篇:leetcode 验证回文字符串 java实现

    发表评论

    最新留言

    路过,博主的博客真漂亮。。
    [***.116.15.85]2025年04月16日 05时39分29秒