
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]
代码解释
a
和b
初始化为-1,表示尚未找到候选元素。cnt_a
和cnt_b
用于记录每个候选元素的计数。这种方法确保了线性时间和O(1)空间复杂度,能够高效地解决问题。
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月16日 05时39分29秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
leetcode Plus One
2023-01-31
LeetCode shell 题解(全)
2023-01-31
LeetCode Text Justification
2023-01-31
leetcode Valid Parentheses
2023-01-31
Leetcode | Simplify Path
2023-01-31
LeetCode – Refresh – 4sum
2023-01-31
LeetCode – Refresh – Valid Number
2023-01-31
leetcode — edit-distance
2023-01-31
LeetCode 中级 - 有序链表转换二叉搜索树(109)
2023-01-31
leetCode 字符串反转
2023-01-31
LeetCode 无重复字符的最长子串 获取字符串中不重复的子串最大长度
2023-01-31
LeetCode 热题 HOT 100 (java算法)实时更新 未完
2023-01-31
leetCode 给定数组,目标值 计算数组下标
2023-01-31
leetcode 验证回文字符串 java实现
2023-01-31
LeetCode(229):Majority Element ||
2023-01-31
leetcode--
2023-01-31
LeetCode--020--括号匹配
2023-01-31
Leetcode-966 Vowel Spellchecker(元音拼写检查器)
2023-01-31
Leetcode-991 Broken Calculator(坏了的计算器)
2023-01-31