题目描述

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

解题思路

暴力法的时间复杂度时O(N2)O(N^2)O(N2),肯定不行。正确的思路是,对数组进行从小到大排序,然后线性查找即可。这样的时间复杂度时O(log⁡N)O(\log N)O(logN)

AC代码

class Solution {public:int MoreThanHalfNum_Solution(vector<int> numbers) {if(numbers.empty()) {return 0;}sort(numbers.begin(), numbers.end());auto len = numbers.size();int curMax = numbers[0], curN = 1;     // 当前最大值时1int Max = numbers[0], N = 0;           // 当前的数据和个数 for(int i = 1; i < len; ++i) {if(curMax == numbers[i]) {    // 当前最大值+1++curN;} else {  // 现在不是最大值的范围了if(Max == numbers[i]) {   // 如果当前Max连续的话++N;if(N >= curN) {  // 最大值发生更替curN = N;curMax = Max;}} else {Max = numbers[i];   // 越过Max的范围了,重新计数N = 1;}}}if(curN > len / 2) {return curMax;} else {return 0;}}
};

剑指offer之统计数组中出现次数超过一半的数字相关推荐

  1. 对分查找的最多次数_「剑指offer题解」数组中出现次数超过一半的数字

    关注我--个人公众号:后端技术漫谈 我目前是一名后端开发工程师.主要关注后端开发,数据安全,网络爬虫,物联网,边缘计算等方向. 原创博客主要内容 Java知识点复习全手册 Leetcode算法题解析 ...

  2. 剑指 Offer II 028. 数组中出现次数超过一半的数字

    注:本文的代码实现使用的是 JS(JavaScript),为前端中想使用JS练习算法和数据结构的小伙伴提供解题思路. 描述 给一个长度为 n 的数组,数组中有一个数字出现的次数超过数组长度的一半,请找 ...

  3. 剑指offer-python:36.数组中出现次数超过一半的数字

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

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

    [LeetCode]剑指 Offer 39. 数组中出现次数超过一半的数字 文章目录 [LeetCode]剑指 Offer 39. 数组中出现次数超过一半的数字 一.摩尔投票法 一.摩尔投票法 核心理 ...

  5. 剑指offer——面试题29:数组中出现次数超过一半的数字

    剑指offer--面试题29:数组中出现次数超过一半的数字 Solution1: 20180902日整理 注意几点: 1.若下一个数字和我们之前保存的数字相同,则次数 +1 2.若下一个数字和我们之前 ...

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

    剑指 Offer 39. 数组中出现次数超过一半的数字https://leetcode.cn/problems/shu-zu-zhong-chu-xian-ci-shu-chao-guo-yi-ban ...

  7. 《剑指offer》-- 复杂链表的复制、字符串的排列、数组中出现次数超过一半的数字、连续子数组的最大和

    一.复杂链表的复制: 参考牛客网的chancy:https://www.nowcoder.com/questionTerminal/f836b2c43afc4b35ad6adc41ec941dba 1 ...

  8. 剑指offer:面试题39. 数组中出现次数超过一半的数字

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

  9. 【剑指offer】十九,数组中出现次数超过一半的数字

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

最新文章

  1. 跟我学交换机配置(四)
  2. 岭回归与Lasso回归
  3. 机器学习Sklearn实战——adaboost
  4. 【BZOJ1623】 [Usaco2008 Open]Cow Cars 奶牛飞车 贪心
  5. ASP.NET Zero--5.配置权限
  6. C++ String16与const char*及char*与vector相互转换
  7. Xcode 12 导出ipa包
  8. 视频教程-CCNA趣味实战无线实验视频课程—含PPPOE、ADSL、CABLE等-思科认证
  9. Swift 使用SwiftyJSON解析JSON数据
  10. PSB格式转换太麻烦?Aspose.PSD教你用代码将大型PSB文件转换为PDF/JPEG格式
  11. LM317,线性稳压电源总结
  12. java web play_玩转 Java Web 应用开发:Play 框架
  13. malloc和calloc异同
  14. CorelDRAW制作360安全浏览器图标
  15. 常见的压力面试题及面试技巧
  16. 关于阅读英语文献的一些整理方法
  17. 华为正鸿蒙发布会,星星之火 数码视讯支持华为鸿蒙发布会全球直播
  18. Coursera | Introduction to Data Science in Python(University of Michigan)| Assignment2
  19. 天津市网络安全等级保护和关键信息基础设施安全保护工作宣贯会成功举办
  20. WIFI基础入门--802.11k--无线局域网络频谱测量

热门文章

  1. python文件输入符_python基础入门详解(文件输入/输出 内建类型 字典操作使用方法)...
  2. libxml2如何配合php使用,libxml2实现xml文档的节点的修改
  3. 错排问题(以航电OJ 2048 为例)
  4. CleanCodeHandbook Chapter 9: Binary Search(48-50)
  5. 【设计模式】设计模式六大原则
  6. 面试—每日一题(5)
  7. 敏捷开发智慧敏捷系列之六:之一~之五的小结
  8. bootstrapTable 取消 “正在加载中...”
  9. jemter 使用if控制器,选择需要的内容
  10. Linux虚拟机-配置文件说明