Majority Element——算法课上的一道题(经典)
2015-06-15 15:38
330 查看
Given an array of size n, find the majority element. The majority element is the element that appears more than
You may assume that the array is non-empty and the majority element always exist in the array.
需要注意的是:这道题只是要找出多数元素,已经默认存在多数元素了,而不需要去判断是否存在多数元素。之前的思路就一直卡在怎么判断多数元素存的的问题上了。
思路解析:
1. 初始化majorityIndex,并且维护其对应count;
2. 遍历数组,如果下一个元素和当前候选元素相同,count加1,否则count减1;
3. 如果count为0时,则更改候选元素,并且重置count为1;
4. 返回A[majorityIndex]
原理:如果majority元素存在(majority元素个数大于n/2,个数超过数组长度一半),那么无论它的各个元素位置是如何分布的,其count经过抵消和增加后,最后一定是大于等于1的。 如果不能保证majority存在,需要检验。 复杂度:O(N)
Attention: 循环时从i = 1开始,从下一个元素开始,因为count已经置1
C++版:
Python版:
⌊ n/2 ⌋times.
You may assume that the array is non-empty and the majority element always exist in the array.
需要注意的是:这道题只是要找出多数元素,已经默认存在多数元素了,而不需要去判断是否存在多数元素。之前的思路就一直卡在怎么判断多数元素存的的问题上了。
思路解析:
1. 初始化majorityIndex,并且维护其对应count;
2. 遍历数组,如果下一个元素和当前候选元素相同,count加1,否则count减1;
3. 如果count为0时,则更改候选元素,并且重置count为1;
4. 返回A[majorityIndex]
原理:如果majority元素存在(majority元素个数大于n/2,个数超过数组长度一半),那么无论它的各个元素位置是如何分布的,其count经过抵消和增加后,最后一定是大于等于1的。 如果不能保证majority存在,需要检验。 复杂度:O(N)
Attention: 循环时从i = 1开始,从下一个元素开始,因为count已经置1
C++版:
class Solution { public: int majorityElement(vector<int> &num) { int elem = 0; int count = 0; for(int i = 0; i < num.size(); i++) { if(count == 0) { elem = num[i]; count = 1; } else { if(elem == num[i]) count++; else count--; } } return elem; } };
Python版:
class Solution: # @param {integer[]} nums # @return {integer} def majorityElement(self, nums): lenth=len(nums) index=0 count=1 for i in range(lenth): if nums[index]==nums[i]: count+=1 else: count-=1 if count==0: index=i count+=1 return nums[index]
相关文章推荐
- 再谈协方差矩阵之主成分分析
- android自定义组件
- 无锁队列--基于linuxkfifo实现
- 作业5.18
- Android实用方法—HttpClient实现登录功能
- Js初学笔记之<创建对象的五种方式>
- 二分图的判断
- 【最新版下载】Android studio教程与问题汇总
- 微软100题(83)百度面试题_memmove实现
- 面向对象软件设计原则
- 应用程序内置资源实现换肤功能
- IOS程序发布AppStore流程
- 处理unity文档打开慢的问题
- Elasticsearch集群搭建
- Android实用方法—webview的JS交互
- Linux Trap命令
- 监控SharePoint效率之(二) –查看使用报告
- Javascript Error: 11233 Content-Length mismatch
- 发送邮件方法
- Search Insert Position