博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(数组)众数问题
阅读量:6264 次
发布时间:2019-06-22

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

题目:

给一数组,如果存在众数,找出众数,即超过一半的数,如果不存在,返回-1.

思路:

众数:众数出现的次数大于其他所有数出现次数之和

方法1:hashmap

通过遍历数组,将数组每个数都通过hashmap来统计其出现的个数,如果某个数个数超过一半,则为众数。

时间空间复杂度均为O(n)

方法2:Moore Voting Algorithm

众数存在的情况下,每次扔掉两个不同的数,众数不变,最终剩下的数一定是众数。

  • 扔掉一个众数和一个非众数,众数不变
  • 扔掉两个非众数,众数不变

时间复杂度O(n),空间复杂度O(1)

代码:

#include 
#include
#include
#include
using namespace std;class Solution {public: // hash_map method int majorityElement1(vector
&num) { int n =num.size(); if(n==1) return num[0]; map
m; for(vector
::iterator it=num.begin();it!=num.end();it++){ m[*it]+=1; if(m[*it] > floor(n/2)) return *it; } return -1; } // moore voting algorithm int majorityElement2(vector
&num){ int n=num.size(); if(n==1) return num[0]; int count=0; int x; for(int i=0;i
floor(n/2)) return x; else return -1; }};int main(){ int A[]={ 2,3,4,5,2,6,2}; int n=sizeof(A)/sizeof(A[0]); vector
nums(A,A+n); Solution s; cout<
<

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

你可能感兴趣的文章
JNotify的监测文件变化的简单测试例子
查看>>
ALINX公众号
查看>>
Oracle 分区表的新增、修改、删除、合并。普通表转分区表方法
查看>>
RedisHelper帮助类
查看>>
js进阶 10-1 JQuery是什么
查看>>
Hadoop生态圈-Flume的组件之自定义拦截器(interceptor)
查看>>
orcale查询表之间的关联关系
查看>>
关于pythoh面向过程开发人员三步转面向对象的补充,再加一步,四步走战略。转面向对象也可以有固定公式。...
查看>>
SVN设置必须锁定
查看>>
(Apache)ab 压力测试 简单使用
查看>>
程序包com.sun.image.codec.jpeg不存在解决方法
查看>>
Linux也有后悔药,五种方案快速恢复你的系统
查看>>
OpenLDAP在win2008上安装配置
查看>>
根据id查询所有子节点/父节点,mysql 以及ssm前后台处理流程
查看>>
如何提交内核补丁--checkpatch.pl使用【转】
查看>>
MFC程序显示控制台输出
查看>>
网易博客挂了,转一篇以前的文章过来纪念一下吧。。
查看>>
三角形(css3)
查看>>
Cgroups 与 Systemd
查看>>
java三大框架实现任务调度——IRemindService
查看>>