题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。

A1:用算法类中的sort函数排序,中间的数有可能是出现次数超过数组长度一半的数,保存起来,然后遍历数组查看该数的个数,若出现次数大于数组长度的一半,则输出该数  ====> O(nlogn)

A2:用hash存储数和它出现的次数,若有数出现的次数大于数组长度的一半则输出 ====> O(n)

//先排序再查找 O(nlogn)

class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if(numbers.empty())
{
return 0;
}
sort(numbers.begin(), numbers.end()); int length_mid = numbers.size() / 2;
int middle = numbers[length_mid]; int count = 0; // 出现次数
for(int i = 0;i < numbers.size(); ++i)
{
if(numbers[i] == middle)
{
++count;
}
} return (count > length_mid) ? middle : 0;
}
};

 

//map  O(n)

class Solution {
public:
int MoreThanHalfNum_Solution(vector<int> numbers) {
if (numbers.empty())
{
return 0;
} int count = 0;
int length_mid = numbers.size() / 2;
map<int, int> m_map;
for(int i = 0; i < numbers.size(); i++)
{
count = ++m_map[numbers[i]];
if(count > length_mid)
{
return numbers[i];
}
}
return 0;
}
};

【剑指Offer】【数组】数组中出现次数超过一半的数字的更多相关文章

  1. [剑指Offer]39-数组中出现次数超过一半的数字(快排延申,找第k大数同理)

    题目链接 https://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163?tpId=13&tqId=11181&t ...

  2. Leetcode - 剑指offer 面试题29:数组中出现次数超过一半的数字及其变形(腾讯2015秋招 编程题4)

    剑指offer 面试题29:数组中出现次数超过一半的数字 提交网址: http://www.nowcoder.com/practice/e8a1b01a2df14cb2b228b30ee6a92163 ...

  3. 剑指Offer - 九度1370 - 数组中出现次数超过一半的数字

    剑指Offer - 九度1370 - 数组中出现次数超过一半的数字2013-11-23 03:55 题目描述: 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组 ...

  4. 剑指Offer:数组中出现次数超过一半的数字【39】

    剑指Offer:数组中出现次数超过一半的数字[39] 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如,输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于这 ...

  5. 剑指Offer(二十八):数组中出现次数超过一半的数字

    剑指Offer(二十八):数组中出现次数超过一半的数字 搜索微信公众号:'AI-ming3526'或者'计算机视觉这件小事' 获取更多算法.机器学习干货 csdn:https://blog.csdn. ...

  6. 剑指 Offer 39. 数组中出现次数超过一半的数字 + 摩尔投票法

    剑指 Offer 39. 数组中出现次数超过一半的数字 Offer_39 题目描述 方法一:使用map存储数字出现的次数 public class Offer_39 { public int majo ...

  7. 剑指 Offer 39. 数组中出现次数超过一半的数字

    剑指 Offer 39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [ ...

  8. 力扣 - 剑指 Offer 39. 数组中出现次数超过一半的数字

    题目 剑指 Offer 39. 数组中出现次数超过一半的数字 思路1(排序) 因为题目说一定会存在超过数组长度一半的一个数字,所以我们将数组排序后,位于length/2位置的一定是众数 代码 clas ...

  9. 数组中出现次数超过一半的数字 牛客网 剑指Offer

    数组中出现次数超过一半的数字 牛客网 剑指Offer 题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字 ...

  10. 【剑指Offer】数组中出现次数超过一半的数字 解题报告(Python)

    [剑指Offer]数组中出现次数超过一半的数字 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-inter ...

随机推荐

  1. [机器学习] PCA主成分分析原理分析和Matlab实现方法

    转载于http://blog.csdn.net/guyuealian/article/details/68487833 网上关于PCA(主成分分析)原理和分析的博客很多,本博客并不打算长篇大论推论PC ...

  2. Java8时间日期处理新特性

    Java8时间日期处理新特性 简介 伴随lambda表达式.streams以及一系列小优化,Java 8 推出了全新的日期时间API.Java处理日期.日历和时间的不足之处:将 java.util.D ...

  3. iOS Reveal 4 安装详解简单粗暴

    项目在测试的时候,然后拿了公司最低配置的ipod 来装我们的项目,但是呢,我们的项目居然掉帧很厉害,然后看了一下别人的app,居然不卡,然后就想去看看,别人是怎么做到的.然后呢?就走上了Reveal之 ...

  4. 如何通过Java应用程序将 PDF转为Word文档

    众所周知,PDF文档除了具有较强稳定性和兼容性外, 还具有较强的安全性,在工作中可以有效避免别人无意中对文档内容进行修改.但与此同时,也妨碍了对文档的正常的修改.这时我们可以将PDF转为Word文档进 ...

  5. 加速 Document AI (文档智能) 发展

    在企业的数字工作流中充满了各种文档,包括信件.发票.表格.报告.收据等,我们无法自动提取它们的知识.如今随着文本.视觉和多模态人工智能的进步,我们有可能解锁这些知识,这篇文章向你展示了你的团队该如何使 ...

  6. Java基础学习笔记-类的静态属性和静态方法--待继续补充

    程序运行时的内存占用 代码区(code area) 存放代码 数据区(data area) 存放全局数据.静态数据 堆区(heap area) 存放动态申请的数据 栈区(stack area) 存放局 ...

  7. FLASH-CH32F203替换CH32F103 FLASH快速编程移植说明

    因CH32F203 相对于CH32F103 flash操作的快速编程模式由单次128字节编程变成了单次256字节编程,该文档说明主要目的是为了方便客户在原先CH32F103工程的基础上实现flash ...

  8. vue学习笔记(一) ----- vue指令(菜单列表案例)

    一.渲染品牌列表 <div id="app"> <div class="panel panel-primary"> <div cl ...

  9. FAQ docker进程启动失败处理案例分享

    docker进程启动失败处理 背景 有同学反馈在启动docker的时候遇到了如下问题:docker启动报错 [root@wuxianfeng ~]# systemctl start docker Jo ...

  10. vivo官网App模块化开发方案-ModularDevTool

    作者:vivo 互联网客户端团队- Wang Zhenyu 本文主要讲述了Android客户端模块化开发的痛点及解决方案,详细讲解了方案的实现思路和具体实现方法. 说明:本工具基于vivo互联网客户端 ...