当前位置: 首页 > news >正文

【practise】数组中出现次数超过一半的数字

关于我:在这里插入图片描述


睡觉待开机:个人主页

个人专栏: 《优选算法》《C语言》《CPP》
生活的理想,就是为了理想的生活!
作者留言

PDF版免费提供倘若有需要,想拿我写的博客进行学习和交流,可以私信我将免费提供PDF版。
留下你的建议倘若你发现本文中的内容和配图有任何错误或改进建议,请直接评论或者私信。
倡导提问与交流关于本文任何不明之处,请及时评论和私信,看到即回复。


参考目录

  • 1.前言
  • 2.题目简介
  • 3.题目思路
  • 4.参考代码


1.前言

今天我们来简单分享一道不同于经典双指针啊,前缀和算法…等等很有体系的题目,咱们来一道不难,但是思路却比较新颖的题目。
我想,如果你没有接触过这类题目还真不见得可以想到这种方法——投票选举。

2.题目简介

题目链接:LINK
在这里插入图片描述
题意:题目叙述很简单,给你一个数组,让你找出其中出现次数超过一半的一个元素。

不知你是否想到了什么思路,我立刻想到的就是用哈希数组进行一一记数然后遍历哈希数组找到出现次数超过一半的那个元素。
但是显然这种解法不满足题目要求,空间复杂度是O(N)级别的,我们题目要求是O(1)

这里空间复杂度的限制,这样就很难了。

3.题目思路

加入数组中存在众数,那么众数一定大于数组的长度的一半。
思想就是:如果两个数不相等,就消去这两个数,最坏情况下,每次消去一个众数和一个非众数,那么如果存在众数,最后留下的数肯定是众数。

具体做法:
初始化:候选人cond = -1, 候选人的投票次数cnt = 0
遍历数组,如果cnt=0, 表示没有候选人,则选取当前数为候选人,++cnt
否则,如果cnt > 0, 表示有候选人,如果当前数=cond,则++cnt,否则–cnt
直到数组遍历完毕,最后检查cond是否为众数

这是什么原理呢?下面我来为大家举例解读。
是这样的,有很多人投票,每个人都对自己心仪的对象进行投票,最后的结果肯定是谁的投票高谁得第一。假设现在有一个计票员,需要依次对每个人手里的票进行记录,比赛结果要求很简单,不用按票数排名,只需要知道第一名是谁就行了,对第二名第三名…并不关注
在这里插入图片描述
现在,我们把vector中的元素看作一个一个的投票人,每个元素的数值就是对应的投票对象。而我们的计票员依次对每个人计票就是类似于我们一个变量依次遍历数组。
在这里插入图片描述
在这里插入图片描述
这时候,计票员只需要准备两个变量,一个变量存放当前是谁第一,第二个变量是存放相比于其他人第一名的相对票数。
我们知道,数组中出现次数超过一半的数字势必会比其他人所有出现次数之和都多。
在这里插入图片描述

4.参考代码

class Solution {
public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param numbers int整型vector * @return int整型*/int MoreThanHalfNum_Solution(vector<int>& numbers) {// write code hereint count = 0;int candidate = -1;for(int i = 0; i < numbers.size(); i++){if(count == 0){candidate = numbers[i];count++;}else {if(numbers[i] == candidate){count++;}else {count--;}}}return candidate;}
};


好的,如果本篇文章对你有帮助,不妨点个赞~谢谢。
在这里插入图片描述


EOF

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ABAP小白开发操作手册+(九)ABAP调用http
  • 泛型类型,存在确定得属性,剩下的属性都是通过泛型传进来
  • 【数据结构的——红黑树】
  • Javascript——宏任务微任务与JavaScript引擎的事件循环(Event Loop)和任务调度
  • C语言求平方和倒数
  • 【区块链+社会公益】第一反应互助急救链 | FISCO BCOS应用案例
  • leetcode50. Pow(x, n),快速幂算法
  • Java 代码详解:删除链表中的倒数第 N 个节点
  • JavaScript 数组迭代
  • WPF篇(5)- Border控件(边框布局)+GridSplitter分割窗口
  • Linux虚拟化技术的演进:Xen与KVM的历程与影响
  • 【Kubernetes】k8s集群之Pod容器资源限制和三种探针
  • 河南萌新联赛2024第(四)场:河南理工大学补题(B,C,I)
  • 软件测试面试题汇总,超详细整理。。。
  • 【https】无法安装OpenSSL时如何在局域网开通https服务
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • CSS中外联样式表代表的含义
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • GraphQL学习过程应该是这样的
  • IE报vuex requires a Promise polyfill in this browser问题解决
  • js
  • JS+CSS实现数字滚动
  • LeetCode18.四数之和 JavaScript
  • linux学习笔记
  • nodejs:开发并发布一个nodejs包
  • php面试题 汇集2
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • 产品三维模型在线预览
  • 大数据与云计算学习:数据分析(二)
  • 翻译--Thinking in React
  • 给github项目添加CI badge
  • 后端_ThinkPHP5
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 普通函数和构造函数的区别
  • 嵌入式文件系统
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #NOIP 2014# day.2 T2 寻找道路
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (04)Hive的相关概念——order by 、sort by、distribute by 、cluster by
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (env: Windows,mp,1.06.2308310; lib: 3.2.4) uniapp微信小程序
  • (编译到47%失败)to be deleted
  • (第27天)Oracle 数据泵转换分区表
  • (第二周)效能测试
  • (附源码)ssm经济信息门户网站 毕业设计 141634
  • (五)c52学习之旅-静态数码管
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)详解PHP处理密码的几种方式
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • ***测试-HTTP方法
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .net core docker部署教程和细节问题
  • .net core 连接数据库,通过数据库生成Modell