LeetCode: Majority Element
来源:互联网 发布:缺血半暗带的算法 编辑:程序博客网 时间:2024/06/09 00:40
题目:
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.
解法一:
最直观的解法是检查每个元素是否为majority element, 两轮循环,算法复杂度为O(n^2)。如果用STL里map里的find函数来查找,时间复杂度可以优化为o(nlogn)。或者将数组排序后在找,时间复杂度也为O(nlogn)。此处不再赘述。
解法二:
分治法:将原数组分为两部分,分别查找两个子数组的majority element,得到A和B两个元素,若A == B则说明该元素就是Majority Element,否则对A和B分别进行判断是否为Majority Element。时间复杂度为O(nlogn)。Accepted的代码:
class Solution {public: int devide(int x,int y,vector<int>& nums) { if(x==y) return nums[x]; int mid=(x+y)/2; int left=devide(x,mid,nums); int right=devide(mid+1,y,nums); if(left==right) return left; else { int countleft=0; int countright=0; for(int i=x;i<=y;i++) { if(nums[i]==left) countleft++; if(nums[i]==right) countright++; } return countleft>countright? left:right; } } int majorityElement(vector<int>& nums) { return devide(0,nums.size()-1,nums); }};
解法三:
在网上看到一种线性复杂度(O(n))的算法, Moore’s Voting Algorithm,是Robert S.Boyer 和J Strother Moore于1980年发明的。算法思想:将不同的单词成对删除,最后留下的单词即是majority element。Accepted的代码:
class Solution {public: int majorityElement(vector<int>& nums) { int temp=nums[0]; int count=1; for(int i=1;i<nums.size();i++) { if(count==0) { temp=nums[i]; count++; } else { if(nums[i]==temp) count++; else count--; } } return temp; }};
0 0
- 【leetcode】Majority Element II,Majority element algorithm
- Leetcode: Majority Element &Majority Element II
- Leetcode Majority Element
- leetcode 169-Majority Element
- 【leetcode 哈希表】Majority Element
- LeetCode:Majority Element
- leetcode:Majority Element
- leetcode: Majority Element
- [LeetCode] Majority Element
- leetcode 153: Majority Element
- leetcode Majority Element
- LeetCode:Majority Element
- leetcode:Majority Element
- [LeetCode] Majority Element
- Leetcode-Majority Element
- [leetcode]Majority Element
- [LeetCode]Majority Element
- Leetcode: Majority Element
- 3. Longest Substring Without Repeating Characters
- go库中自带的反向代理功能和内网代理
- 面试准备--二叉树的非递归遍历(Java版)
- js模拟手机滑动页面
- 用ADT的FileExplorer查看android手机中的数据库
- LeetCode: Majority Element
- hdu 3555 Bomb 【数位DP】
- 今日get的新技能
- android之壁纸机制
- listview 在不改变数据源的情况下 刷新adapter 的解决办法
- 机器学习实战笔记2(k-近邻算法)
- 安卓模拟器不能联网的解决方案
- 三种快排及四种优化方式
- U3D Resources & AssetBundle内存管理总结