Majority Element [LeetCode 169]
来源:互联网 发布:linux 嵌入式 播放器 编辑:程序博客网 时间:2024/04/29 15:40
Description
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.
Analysis
最简单的方法就是计算每个数出现的次数,当统计到一个数出现的次数大于n/2,那么就输出这个数。时间复杂度为O(n)。
但由于我是选择的是Divide and Conquer这个topic,所以我尝试用分治的思想解决这个问题。
分治法的思想:
- 将大的问题分解为小的子问题,但子问题和大问题本质上为同一问题。
- 递归解决这些子问题。
- 将子问题的解答合并获得大问题的解答。
假设输入的是一个长度为n的vector,我们可以从中间把它分成两半,分别求出它们中出现次数最多的数。这两半也可以继续分解,分解到仅剩下一个数时停止。这就是一个把大问题分解为小的子问题的过程,我们要做的仍然是求出出现次数最多的数,但由于不断的分解,最后只剩下一个数时,这个数这个子问题中出现次数最多的数了。
Answer
class Solution {public: int majorityElement(vector<int>& nums) { return (majorpart(nums, 0, nums.size()-1)); }private: int majorpart(vector<int>& nums, int left, int right) { if (left == right) return nums[left]; int mid = left + ((right - left)/2); //递归解决子问题 int leftpart = majorpart(nums, left, mid); int rightpart = majorpart(nums, mid + 1, right); //cout << leftpart << ' ' << rightpart << endl; //将子问题的解答合并获得大问题的答案 if (leftpart == rightpart) return leftpart; else { int a = count(nums.begin() + left, nums.begin() + right + 1, leftpart); int b = count(nums.begin() + left, nums.begin() + right + 1, rightpart); return a>b? leftpart:rightpart; } }};
阅读全文
0 0
- leetcode 169-Majority Element
- [leetcode 169] Majority Element
- leetCode#169 Majority Element
- Leetcode-169Majority Element
- LeetCode 169: Majority Element
- [LeetCode][169][Majority Element]
- LeetCode 169 Majority Element
- Majority Element leetcode[169]
- Leetcode[169]-Majority Element
- leetcode[169]:Majority Element
- leetcode-169-Majority Element
- leetcode 169: Majority Element
- Leetcode # 169 Majority Element
- [Leetcode]#169 Majority Element
- LeetCode 169: Majority Element
- 【LEETCODE】169-Majority Element
- 【LeetCode】169Majority Element
- Leetcode #169 Majority Element
- 现代OpenGL+Qt学习笔记之三:显示一个彩色三角形
- WOJ-202 找不同
- HDU
- Python1.输入与输出
- 服务器信息储存(最短路)
- Majority Element [LeetCode 169]
- HDU 6197 array array array(最长上升或下降子序列)
- 深入理解 Python 的 “==” 和 “is”
- 计算2/1,3/2,5/3,8/5,13/8,21/13……前n项的和(仅用于讨论)
- 聊天记录删除后的恢复方法汇总
- Java transient关键字使用小记
- 由sudo 为何提示找不到命令说起
- 吾爱破解160个crackme之014
- iOS学习笔记-138.RunLoop06——Runloop相关类4_ CFRunloopSourceRef和CFRunLoopObserverRef