leetcode---Majority Element
2016-03-26 20:42
323 查看
这道题有多个解法,贴出一位博主的图:
下面贴出我自己写的几种代码,其中思路二借鉴了一位博主的思想:/article/5095799.html
思路一:对数组先排序,这样相同的元素相邻,就很容易找到majority element了。
思路二:每两个不同的元素看作一个组,把每个这样的组删除后剩下的一定是majority element 。
思路三:对元素进行位运算,所有元素在每个二进制位上是1的数目多还是0的数目多,数目多的就决定了majority element在那个二进制位上是0还是1 。
下面贴出我自己写的几种代码,其中思路二借鉴了一位博主的思想:/article/5095799.html
思路一:对数组先排序,这样相同的元素相邻,就很容易找到majority element了。
class Solution { public: int majorityElement(vector<int>& nums) { sort(nums.begin(),nums.end()); int coun=1,the_ele=nums[0]; int n=nums.size()/2; for(int i=1;i<nums.size();i++){ if(nums[i]!=nums[i-1]){ coun=1; continue; } else{ coun++; if(coun>n){ the_ele=nums[i]; break; } } } //cout<<the_ele<<endl; return the_ele; } };
思路二:每两个不同的元素看作一个组,把每个这样的组删除后剩下的一定是majority element 。
class Solution { public: int majorityElement(vector<int>& nums) {//每两个不同的元素就删除,剩下的那个就是majority element int can; int coun=0; for(int i=0;i<nums.size();i++){ if(coun==0){ can=nums[i]; coun=1; } else{ if(can==nums[i]) coun++; else coun--; } } return can; } };
思路三:对元素进行位运算,所有元素在每个二进制位上是1的数目多还是0的数目多,数目多的就决定了majority element在那个二进制位上是0还是1 。
class Solution { public: int majorityElement(vector<int>& nums) { int bit=0,re=0; int n=nums.size(); for(int i=0;i<32;i++){ for(int j=0;j<n;j++){ bit+=(nums[j]>>i)&1; } if(n-bit>bit) bit=0; else bit=1; re|=bit<<i; bit=0; } //cout<<re<<endl; return re; } };
相关文章推荐
- Android应用界面开发_学习笔记_第四周
- 对比DataTable和泛型
- 科学论文写作工具TEX/LaTEX/CTEX
- 开源 E-ChartSdk 的使用方法
- 写在开头的话
- 递归方法产生格雷码
- 听VOA还不如学这些
- 淘宝技术这十年概要
- ASP.NET MVC 3 使用 Razor 如何在 Web.config 宣告預設的 Namespaces
- 具有相同元素的排列组合模板
- hdoj--A Heavy Rainy Day(贪心好题)
- corodva Refused to load the font——拒绝加载字体
- Python中zipfile模块最最最最简单的例子
- 浙江科技学院第十三届程序设计竞赛 1007:幸福指数【水】
- 欢迎使用CSDN-markdown编辑器
- 约瑟夫环
- 数组系列练习二
- 数据的特性与关系
- MFC之CSerialPort类双串口发送接收
- 数据字典