算法设计与应用基础: 第二周(1)

来源:互联网 发布:怎么做seo 编辑:程序博客网 时间:2024/06/09 18:59

169. Majority Element

Description Submission Solutions
  • 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
原创粉丝点击