您的位置:首页 > 其它

【leetcode】 Majority_Element

2015-03-01 13:47 260 查看
题目:

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.


解法:

1.先排序,后返回最中间的数:

public int majorityElement1(int[] num) {

quickSort(num,0,num.length-1);
return num[num.length/2];
}

public void quickSort(int[] num,int start,int end){
//递归结束的条件,start>end
int pivot = 0;
if(start<end){
pivot = fastSort(num,start,end);

quickSort(num,start,pivot-1);
quickSort(num,pivot+1,end);
}
}

public int fastSort(int[] num,int start,int end){
int temp = 0;
while(start<end){
while(start<end&&num[start]<=num[end])
end--;
//出循环两种情况,start>end 或者  num[start]>num[end]
if(start<end){
temp=num[start];
num[start]=num[end];
num[end]=temp;
start++;
}
while(start<end&&num[start]<=num[end])
start++;
if(start<end){
temp=num[start];
num[start]=num[end];
num[end]=temp;
end--;
}
}
return start;
}


2.找成对的元素,相同加1,不同减1,最后留下的就是主要的。

public int majorityElement(int[] num) {
int elem=0;
int count=0;
for(int i=0;i<num.length;i++){
if(count==0){
elem=num[i];
count++;
}else{
if(elem==num[i])
count++;
else
count--;
}
}
return elem;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: