算法设计与应用基础: 第二周(1)
来源:互联网 发布:怎么做seo 编辑:程序博客网 时间:2024/06/09 18:59
169. Majority Element
- Total Accepted: 175102
- Total Submissions: 386612
- Difficulty: Easy
- Contributors: Admin
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.
算法分析:结合本周所讲的divide and conquer,先尝试将该问题分解为两个小问题:将该数组分为前后两个大小相等或者相差一个元素的数组,分别寻找这两个数组中出现次数最多的元素(同理对这两个数组继续进行分解,直到只有一个元素为止),对于这两个分别最大的元素,1如果它们相等,则就是要找的元素;2 它们不相等,则遍历对应的数组比较它们谁出现的次数更多(复杂度为o(n) )。递推式为T(n) =2T(n/2) +2O(n),由主定理可知复杂度为O(nlogn)。代码如下
class Solution {public: int majorityElement(vector<int>& nums) { int size=nums.size(); return majority(nums,0,size-1); }private: int majority(vector<int>& nums,int begin,int end) { if(begin==end) return nums[begin]; else { int med=(begin+end)/2; int front=majority(nums,begin,med); int back=majority(nums,med+1,end); if(front==back) return front; else { int num1=0,num2=0; for(int i=begin;i<=end;i++) { if(nums[i]==front) num1++; else if(nums[i]==back) num2++; } //if(num1>num2) //return front; //else //return back; return (num1>num2)?front:back; } } }};
0 0
- 算法设计与应用基础: 第二周(1)
- 算法设计与应用基础:第二周(1)
- 算法设计与应用基础-第二周
- 算法设计与应用基础:第二周(2)
- 算法设计与应用基础作业第二周
- 算法设计与应用基础: 第三周(1)
- 算法设计与应用基础: 第五周(1)
- 算法设计与应用基础: 第七周(1)
- 算法设计与应用基础:第八周(1)
- 算法设计与应用基础:第九周(1)
- 算法设计与应用基础: 第十周(1)
- 算法设计与应用基础:第十二周(1)
- 算法设计与应用基础:第十三周(1)
- 算法设计与应用基础:第十六周(1)
- 算法设计与应用基础:第十六周(1)
- 算法设计与应用基础:第十七周(1)
- 算法设计与应用基础:第三周
- 算法设计与应用基础-第三周
- 二叉树--九度.1201.[二叉排序树]
- KMP算法
- All in All UVA
- pat-top 1006. Tree Traversals
- android UI开发之RecyclerView(一)简单实现
- 算法设计与应用基础: 第二周(1)
- oracle分析函数技术详解(配上开窗函数over())
- Git basic commands
- 承蒙厚爱
- No.69 Sqrt
- 读书笔记 effective c++ Item 22 将数据成员声明成private
- 网络架构
- POJ-1236 Network of Schools,人生第一道Tarjan....
- 基础练习 数列特征