42.leetcode题目:169. Majority Element(还有一种方法待做)

来源:互联网 发布:淘宝店铺怎么发布产品 编辑:程序博客网 时间:2024/05/16 12:38

题目:

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.

分析:

这题在剑指offer上看到过,剑指offer上还没有说明这个数字一定存在,所以在寻找结束后,还要判断这个数字是否超过了总长度的一半

根据快速排序来做,出现次数超过一半的数字必定位于正中间。

class Solution {public:    int majorityElement(vector<int>& nums) {        int n=nums.size();        int start=0,end=n-1,middle=(n)/2;        int index=Partition(nums,n,start,end);        while(index!=middle){        if(index<middle){            start=index+1;            index=Partition(nums,n,start,end);        }        else{            end=index-1;            index=Partition(nums,n,start,end);        }        }        return nums[index];    }    int Partition(vector<int>&data,int length,int start,int end){        //if(data.empty()||length<=0||start<0||end>=length)        //return -1;        //int middle=(start+end)/2;        int index=start-1;        //swap(data[middle],data[end]);        for(int i=start;i<end;++i){            if(data[i]<data[end]){            ++index;            if(index!=i)            swap(data[index],data[i]);            }        }        ++index;        swap(data[end],data[index]);        return index;    }};

40ms。

看到讨论里别人做的,有很巧妙的,:每找到两个不一样的数字则成对删除,最后剩下的数字就是要找的数字。


0 0
原创粉丝点击