博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1-剑指offer: 数组中出现次数超过一半的数字
阅读量:5360 次
发布时间:2019-06-15

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

题目描述

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

代码:

// 至少三种方法// 1. 遍历统计每个数字次数(O(n^2))// 2. 借助快排思想(O(n))// 3. 设置两个标志位,一个用于记录当前数字,另一个用于计数:向后遍历,当遇到相同的数字时,计数加1;//    当遇到不同的数字时,计数减一;并且当计数为0时,替换为当前数字,计数置为1,继续往后遍历,直到数组最后.(O(n))// class Solution {public:    int MoreThanHalfNum_Solution(vector
numbers) { if (numbers.size() == 0) return 0; int current_num = numbers[0]; int cnt = 1; for (std::string::size_type index = 1; index < numbers.size(); index++) { if (numbers[index] == current_num) { cnt++; } else { cnt--; if (!cnt) { if (index == numbers.size()-1) return 0; current_num = numbers[index]; cnt = 1; } } } return current_num; }};

需要注意容易犯错的地方在于如果最后不做检查,很容易导致最后返回的是最后的值,而不会返回0.

转载于:https://www.cnblogs.com/xl2432/p/10863936.html

你可能感兴趣的文章
1027 制作表格
查看>>
Android之Socket通信、List加载更多、Spinner下拉列表
查看>>
面向对象的介绍与特性
查看>>
typing-python用于类型注解的库
查看>>
20189215 2018-2019-2 《密码与安全新技术专题》第13周作业
查看>>
第四周作业
查看>>
一、HTML基础
查看>>
蓝牙进阶之路 (002) - HC-05与HC-06的AT指令的区别(转)
查看>>
mysql的limit经典用法及优化
查看>>
C#后台程序与HTML页面中JS方法互调
查看>>
mysql 同一个表中 字段a 的值赋值到字段b
查看>>
linux系统可执行文件添加环境变量使其跨终端和目录执行
查看>>
antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
查看>>
UNICODE与ANSI的区别
查看>>
nginx 配置实例
查看>>
Flutter - 创建底部导航栏
查看>>
ASP.NET MVC 教程-MVC简介
查看>>
SQL Server索引 - 聚集索引、非聚集索引、非聚集唯一索引 <第八篇>
查看>>
转载:详解SAP TPM解决方案在快速消费品行业中的应用
查看>>
Android OpenGL ES 开发(N): OpenGL ES 2.0 机型兼容问题整理
查看>>