多数元素
时间:2019-11-27
本文章向大家介绍多数元素,主要包括多数元素使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数大于 ⌊ n/2 ⌋ 的元素。
你可以假设数组是非空的,并且给定的数组总是存在多数元素。
示例 1:
输入: [3,2,3]
输出: 3
示例 2:
输入: [2,2,1,1,1,2,2]
输出: 2
code1:分治,首先把数组划分为长度为1的子区间,长度为1时,每个元素就是本身子数组中的众数,然后两两合并子数组,如果左右数组的返回值相同,则这个值就是合并后的两数组的的众数,否则在合并后的区间内统计左右子区间的返回值,出现次数多的为众数。
class Solution { public: int majorityElement(vector<int>& nums) { if(nums.empty()) return 0; return majorityElementCore(nums,0,nums.size()-1); } private: int majorityElementCore(vector<int>& nums,int start,int end) { if(start==end) return nums[start]; int mid=start+(end-start)/2; int left=majorityElementCore(nums,start,mid); int right=majorityElementCore(nums,mid+1,end); if(left==right) return left; int leftCount=countNum(nums,left,start,end); int rightCount=countNum(nums,right,start,end); return leftCount>=rightCount?left:right; } int countNum(vector<int>& nums,int num,int left,int right) { int count=0; for(int i=left;i<=right;++i) { if(nums[i]==num) ++count; } return count; } };
code2:按照计数的方法来解题,先选一个候选数字(比如第一个作为众数),然后依次遍历数组中的每个元素,如果当前元素和候选数字相同,则计数结果+1,否则-1,当计数结果为0时,更新当前数字为候选众数
class Solution { public: int majorityElement(vector<int>& nums) { if(nums.empty()) return 0; int sum=1,resNum=nums[0]; for(int i=1;i<nums.size();++i) { if(sum==0) resNum=nums[i]; sum+=resNum==nums[i]?1:-1; } return sum>=0?resNum:0; } };
原文地址:https://www.cnblogs.com/tianzeng/p/11940401.html
- 简单易学的机器学习算法——线性可分支持向量机
- 基于gensim的Doc2Vec简析,以及用python 实现简要代码
- 关于db link权限分配的苦旅(一) (r7笔记第42天)
- Java设计模式-责任链模式
- Java设计模式-策略模式
- CPU 100%负载的性能优化分析(r7笔记第40天)
- Sklearn-train_test_split随机划分训练集和测试集
- 使用shell来定制dbms_sqltune(r7笔记第39天)
- 简单易学的机器学习算法——分类回归树CART
- Java设计模式-状态模式
- DBA和开发同事的一些代沟(四) (r7笔记第36天)
- python获取文件所在目录和文件名,以及检索当前文件名的方法
- 数据同步中的误导(r7笔记第34天)
- java读取xml文件
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法