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.
Example 1:
Input: [3,2,3]
Output: 3
Example 2:
Input: [2,2,1,1,1,2,2]
Output: 2
---------------------------------------------------------------代码如下--------------------------------------------------------------
/*这种方式在数量较少时可以,数量多的时候运行时间会很长,不能通过测试*/
int majorityElement(int* nums, int numsSize){
int i=0,j=0,sum=0;
for(i=0;i<numsSize;i++){
for(j=0;j<numsSize;j++){
if(nums[i]==nums[j]){
sum++;
};
if(sum>(numsSize/2)){
return nums[i];
}
}
if(sum>(numsSize/2)){
// return nums[i];
break;
}else{
sum=0;
}
}
return nums[i];
}
上面的方法在面临大量数据测试时就不行了。报错如下图。
//可通过的代码如下
//采用了Moore‘S voting Algorithem,算是新知识点。
int majorityElement(int* nums, int numsSize){
int i=0,temp=nums[0],count=0;
for(i=0;i<numsSize;i++){
if(temp==nums[i]){
count++;
}else{
count--;
}
if(count==0){
temp=nums[i+1];
}
}
return temp;
}