博客
关于我
剑指offer Leetcode 39.数组中出现次数超过一半的数字
阅读量:301 次
发布时间:2019-03-03

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

image-20201213104227775

解法1:哈希表

思想:

​ 用哈希表记录出现的个数,有超过一半的就返回

复杂度:

​ 时间:O(n)

​ 空间:O(n)

代码:

class Solution {   public:    int majorityElement(vector
& nums) { unordered_map
nums_map; for(int i : nums){ ++nums_map[i]; if(2 * nums_map[i] > nums.size()) return i; } return -1; }};

解法2:排序取中间数

思想:

​ 数字出现次数多于一半,那么排序后必定在中间

复杂度:

​ 时间:O(nlogn)

​ 空间:O(1)

代码:

class Solution {   public:    int majorityElement(vector
& nums) { sort(nums.begin(), nums.end()); return nums[nums.size() / 2]; }};

解法3:摩尔投票法

思想:

​ 可以理解成混战极限一换一,不同的两者一旦遇见就同归于尽,最后活下来的值都是相同的,即要求的结果

复杂度:

​ 时间:O(n)

​ 空间:O(1)

代码:

class Solution {   public:    int majorityElement(vector
& nums) { int count = 0, res = 0; for(int i : nums){ //如果count为0,遇到的下一个数设为res if(count == 0) res = i; //遇到不同的数减一(一换一),遇到相同的数加一 count += res == i ? 1 : -1; } return res; }};

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

你可能感兴趣的文章
Mybatis源码分析(四):属性接口之objectFactory
查看>>
全面了解 Nginx 主要应用场景
查看>>
最全的spring面试题和答案
查看>>
CentOS 8 已下载ntpdate 却无法使用crond进行时间同步
查看>>
Mybatis的这些坑!把我坑惨了!
查看>>
在 IntelliJ IDEA 中使用 Git,太方便了!
查看>>
7 个显著提升编码效率的IntelliJ IDEA必备插件
查看>>
企业API接口设计之token、timestamp、sign具体实现
查看>>
不懂别瞎搞!Redis 性能优化的 13 条军规!
查看>>
卸载 Navicat!事实已证明,正版客户端,它更牛逼……
查看>>
想彻底了解maven,有这篇文章足够了(中)
查看>>
Intellij IDEA 一些让人爱不释手的小技巧
查看>>
idea连接服务器远程调试(Dockerfile版)
查看>>
ElasicJob分布式定时任务
查看>>
feign调用上传文件接口(MultipartFile)
查看>>
centos 文件格式不对执行报错 || centos查看或者修改文件格式
查看>>
win锁屏界面用户名修改
查看>>
Java设计模式 —— 桥接模式(Bridge)
查看>>
计算机三级 信息安全技术历年真题(二)总共十套 3月底之前更完
查看>>
详解: 最小生成树
查看>>