169. Majority Element
2016-03-23 11:14
225 查看
题目
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.
分析
方法一想的是对vector进行排序,然后使用unique去重,由于该函数会把重复的挪到最后,不会删除元素,所以只需遍历开头到最后一个不重复的位置,使用count函数计算即可,但是发现了unique函数的一个bug,即初始数组为[3,3,4]时,unique之后会变成[3,4,4],所以改用方法二,使用Moore’s
Voting Algorithm算法。
方法一
方法二
Given an array of size n, find the majority element. The majority element is the element that appears more than
⌊ n/2 ⌋times.
You may assume that the array is non-empty and the majority element always exist in the array.
分析
方法一想的是对vector进行排序,然后使用unique去重,由于该函数会把重复的挪到最后,不会删除元素,所以只需遍历开头到最后一个不重复的位置,使用count函数计算即可,但是发现了unique函数的一个bug,即初始数组为[3,3,4]时,unique之后会变成[3,4,4],所以改用方法二,使用Moore’s
Voting Algorithm算法。
方法一
class Solution { public: int majorityElement(vector<int>& nums) { sort(nums.begin(),nums.end()); vector<int>::iterator unique_end=unique(nums.begin(),nums.end()); for(vector<int>::iterator i=nums.begin();i!=nums.end();i++) { int n=count(nums.begin(),nums.end(),*i); if(n>(nums.size()/2)) { return *i; } } } };
方法二
class Solution { public: int majorityElement(vector<int>& nums) { int majority; int cnt = 0; for(int i=0; i<nums.size(); i++){ if ( cnt ==0 ){ majority = nums[i]; cnt++; }else{ majority == nums[i] ? cnt++ : cnt --; if (cnt >= nums.size()/2+1) return majority; } } return majority; } };
相关文章推荐
- 利用ps简单制作个性圆形印章
- 结对编程之心得体会
- Teradata SQL 笔记
- arm32下根据虚函数识别全局对象
- String 常用方法
- 5.UITableView使用 / 数据源 & 代理 / 行高 / TableViewCell 重用 / 索引栏
- php 后台数据库与前台请求结合
- 【攻略】Sql常用语句
- Linux网络编程 (获取ip地址 gethostbyname)
- 读取txt文本到一个字符串(java)
- System.currentTimeMillis与System.nanoTime
- Android WebView使用深入浅出
- 手机端touchstart,touchmove,touchend事件,优化用户划入某个可以点击LI的效果
- 安卓 unit 测试与 instrument 测试的代码共享
- 第十天、冒泡排序
- C++ 学习
- drawerlayout 点击事件穿透解决办法
- Android App中使用ViewPager+Fragment实现滑动切换效果
- res\HTTPFilter.manifest : general error c1010070: Failed to load and parse the manifest. {_~
- 在Linux系统下安装配置memcached的方法