![](https://img2018.cnblogs.com/blog/1588437/201904/1588437-20190407220600263-1973589027.png)
解法一:快速排序,时间O(nlog(n)),额外空间O(1),但是有两个样例会超时。
(土法分析)快速排序在有序的情况下时间复杂度O(n2)最高,而没有通过的样例估算约为50001个1和50000个2,因此O(n2)的复杂度约为10^10,某大佬说过,根据经验,超过10^9 OJ一般就不会通过,因此快排不行,因为人家特意准备了样例;因此解法2尝试了归并排序保证最坏情况下可以ac;
class Solution {public: int majorityElement(vector & nums) { QuickSort(nums,0,nums.size()-1); int candidate=NULL; int count=0; for(int i=0;i nums.size()/2) return candidate; } return 0; } int partition(vector & nums,int low,int high){ int pivotkey=nums[low]; while(low =pivotkey){ high--; } nums[low]=nums[high]; while(low
& nums,int low,int high){ if(low>=high) return; int pivot=partition(nums,low,high); QuickSort(nums,low,pivot-1); QuickSort(nums,pivot+1,high); }};
class Solution {public: int majorityElement(vector & nums) { mergesort(nums,0,nums.size()-1); return nums[nums.size()/2]; } void merge(vector & nums,int left,int mid,int right){ vector temp; int l=left,r=mid+1; while(l<=mid && r<=right){ if(nums[l]
&nums,int left, int right){ if(left>=right) return; int mid=(right+left)/2; mergesort(nums,left,mid); mergesort(nums,mid+1,right); merge(nums,left,mid,right); }};