博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
每日一道算法题--leetcode 169--求众数--python--两种方法
阅读量:5789 次
发布时间:2019-06-18

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

【题目描述】

【求众数I】

【算法思路】

【方法一】

在不要求时间空间复杂度的情况下,可以采用的方法很多,最简单易懂的一种就是对nums中每个值统计一下数量,如果数量大于nums长度的一半,就直接返回。代码如下:

class Solution(object):    def majorityElement(self, nums):        for i in list(set(nums)):            if nums.count(i)>len(nums)/2:                 return i复制代码

【方法二】

摩尔投票法,是一种多数派想法

1.对于v[i],如果c此时为未知状态,则c=v[i],t=1,递增i。

2.如果c==v[i],++t,递增i。

3.如果c!=v[i],–t,如果t==0,将c置为未知状态,递增i。

4.所有投票处理完毕后,如果c为未知状态,则说明不存在任何候选人的得票数过半,否则重新遍历数组v,统计候选人c的实际得票总数,如果c的得票数确实过半,则c就是最终结果。

就是这个数在nums中出现次数过半,那么不管如何抵消,最终终会使c等于这个众数,t>=1。时间复杂度O(n),空间复杂度O(1),代码如下:

class Solution(object):    def majorityElement(self, nums):        m=cm=0        for n in nums:            if n==m:                cm+=1            elif cm==0:                m=n                cm=1            else:                cm-=1        return m复制代码

转载地址:http://bzhyx.baihongyu.com/

你可能感兴趣的文章
可替换元素和非可替换元素
查看>>
2016/08/25 The Secret Assumption of Agile
查看>>
(Portal 开发读书笔记)Portlet间交互-PortletSession
查看>>
搭建vsftpd服务器,使用匿名账户登入
查看>>
JAVA中循环删除list中元素的方法总结
查看>>
Java虚拟机管理的内存运行时数据区域解释
查看>>
人人都会深度学习之Tensorflow基础快速入门
查看>>
ChPlayer播放器的使用
查看>>
js 经过修改改良的全浏览器支持的软键盘,随机排列
查看>>
Mysql读写分离
查看>>
探寻Interpolator源码,自定义插值器
查看>>
一致性哈希
查看>>
Web日志安全分析工具 v2.0发布
查看>>
JS重载
查看>>
python2和python3同安装在Windows上,切换问题
查看>>
php加速工具xcache的安装与使用(基于LNMP环境)
查看>>
android超链接
查看>>
统计数据库大小
查看>>
第十六章:脚本化HTTP
查看>>
EXCEL表中如何让数值变成万元或亿元
查看>>