Q:

给定一个大小为 n 的数组,找出其中所有出现超过 ⌊ n/3 ⌋ 次的元素。

说明: 要求算法的时间复杂度为 O(n),空间复杂度为 O(1)。

示例 1:

输入: [3,2,3]

输出: [3]

示例 2:

输入: [1,1,1,3,3,2,2,2]

输出: [1,2]

A:

一个叫摩尔投票的算法,可以在一次遍历中找出一个数组中的众数(出现次数一半以上的)。通过设置一个计数器和当前‘众数’,若再遇到当前众数计数器加1,遇到其他数字减一,计数器归零时更新当前众数。巧妙之处是每次归零时前面划去的元素都是一半为之前的众数,一半为其他,故剩下的元素序列的众数依然为原来整个序列的众数。

#
# @lc app=leetcode.cn id=229 lang=python3
#
# [229] 求众数 II
#
from collections import defaultdict
class Solution:
def majorityElement(self, nums: List[int]) -> List[int]:
candidate1,candidate2=None,None
cnt1,cnt2=0,0
l=len(nums)
for num in nums:
if num==candidate1:
cnt1+=1
elif num==candidate2:
cnt2+=1
elif cnt1==0:
candidate1=num
cnt1=1
elif cnt2==0:
candidate2=num
cnt2=1
else:
cnt1-=1
cnt2-=1
return [x for x in [candidate1,candidate2] if nums.count(x)>l//3]

最新文章

  1. Android真机调试 Android.Util.AndroidRuntimeException: You cannot combine custom titles with other title features
  2. 10道javascript笔试题
  3. oprofile
  4. 树莓派之web服务器搭建
  5. 在Linux中搭建一个FTP服务器
  6. FloatingWindow
  7. jQuery EasyUI 1.4.4 Combobox无法检索中文输入的问题
  8. [ReadingNotes] Search the links, static final in the java
  9. Oleg Sych - » Pros and Cons of T4 in Visual Studio 2008
  10. Android 标签控件
  11. 高级UNIX环境编程13 守护进程
  12. css的学习笔记
  13. JavaScript设计模式 Item 3 --封装
  14. elasticsearch 之编译过程
  15. SAP FI CO模块常用事务代码
  16. zabbix(2-server-agent)
  17. CentOS下httpd下php 连接mysql 本机可以,外网报错Could not connect: Can't connect to MySQL server on '127.0.0.1' (13)2003 原因解析
  18. Java读写配置文件——Properties类的简要使用笔记
  19. 九度OJ小结2
  20. flynn 开源paas 平台安装试用

热门文章

  1. P3329 [ZJOI2011]最小割
  2. Ueditor1.4.3.3 asp UTF-8版文件缺失修改方法
  3. 查找pod使用的物理目录位置
  4. leetcode - 01
  5. java中拦截器与过滤器
  6. 打铁选手的 CDQ分治 刷题记录
  7. MyEclipse-2017破解过程
  8. BK: Data mining
  9. JFinal Enjoy指令扩展管理常用文本模板
  10. python爬虫匹配实现步骤