算法分析与设计:leetcode169.Majority Element
来源:互联网 发布:数据挖掘和搜索 编辑:程序博客网 时间:2024/06/05 16:27
专门选择了分治算法的题目,首先选了两道easy难度的题。
题目:
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.Credits:
Special thanks to @ts for adding this problem and creating all test cases.
最开始想法是用映射把数字和它的个数联系起来,于是有了个最简单的版本:
class Solution {public: int majorityElement(vector<int>& nums) { map<int, int> nodes; int n = nums.size(); for (int i = 0; i < n; ++i) { nodes[nums[i]]++; if (nodes[nums[i]] > n / 2) { return nums[i]; } } }};
效率不高,只打败了20%的代码。同时这也没有用到分治的思想,于是思考分治算法。
最开始思路不太清晰,参考了一下别人的提示,有点豁然开朗。把数组对半分成2个子数组,再找到子数组的众数,再拿左右子众数的个数来比较,递归返回个数更多的那个众数。当数组只有一个数时,返回它本身。
class Solution {private: int majority(vector<int>& nums, int left, int right) { if (left == right) return nums[left]; int mid = left + (right - left) / 2; int lMajor = majority(nums, left, mid); int rMajor = majority(nums, mid + 1, right); if (lMajor == rMajor) return lMajor; return count(nums.begin() + left, nums.begin() + right + 1, lMajor) > count(nums.begin() + left, nums.begin() + right + 1, rMajor) ? lMajor : rMajor; }public: int majorityElement(vector<int>& nums) { return majority(nums, 0, nums.size() - 1); }};
但这个也只是打败60%左右的代码。因此我去看了一些其他算法,的确分治算法在此不是最优的。
阅读全文
0 0
- 算法分析与设计:leetcode169.Majority Element
- LeetCode169 Majority Element
- LeetCode169:Majority Element
- leetcode169 Majority Element
- LeetCode169. Majority Element(JAVA)
- Leetcode169: Majority Element
- LeetCode169 Majority Element
- LeetCode169. Majority Element题解
- leetcode169~Majority Element
- leetcode169. Majority Element
- leetcode169. Majority Element
- LeetCode169. Majority Element
- leetcode169: Majority Element
- LeetCode169. Majority Element解答
- LeetCode169. Majority Element
- 【算法分析与设计】【第五周】169. Majority Element
- LeetCode169——Majority Element
- LeetCode169. Majority Element分治法
- [Android优化]使用SparseArray和ArrayMap代替HashMap
- fabric源码解析16——peer的gossip服务之测试
- 【Ubuntu】win10和Ubuntu16.04双系统无法访问win10磁盘
- (十)stm32中FSMC的使用(用于LCD)
- void
- 算法分析与设计:leetcode169.Majority Element
- HBase数据存储格式
- ACM-9月17日周日周末训练心得
- CAS操作ABA问题发生的场景
- 分页插件PageHelper使用
- LG>P1020导弹拦截~~A简单版
- 框架漫谈之hibernate(四)hibernate一对多、多对多实体类xml配置
- 读书笔记∣标签:标记系统设计实践
- 【LeetCode】Sort List 链表排序- Medium ++(Merge&Quick Sort)