在一个规模为N的数组A中,所谓过半元素就是出现次数大于N/2的元素,例如
3.3.4.2.4.4.2.4.4
有一个过半元素4
给出一个算法,如果过半元素存在,,就找出来,否则给出报告
[b]问题补充:[/b]
我已经解决掉了这个问题了,对于一楼的那个算法我没有什么探讨,但是个人觉得有点不符合,二楼用了一个map把所有数组里的元素都放进去,一个个数,时间复杂度先不说,空间复杂度就够高的啦,下面是我的答案:
[code="java"]
class halfElement{
public static int find(int[] a){
int sum=1;
int x=a[0];
for(int i=1;i<a.length;i++){
if(a[i]==x){
sum=sum+1;
}else{
sum=sum-1;
}
if(sum<0){
x=a[i];
sum=1;
}
}
System.out.println(sum);
return x;
}
public static void main(String args[]){
int[] a={3, 3, 1, 2, 2, 2, 2, 4, 1};
int result=find(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+",");
}
System.out.println();
System.out.println(result);
}
}
[/code]
[b]问题补充:[/b]
昨天时间太匆忙了,没仔细看,我的算法的确有问题,非常感谢taopian 和etank的指点,但是我仍然比较想找出不借助任何数据结构,[b]原地[/b]找出过半元素的O(n)算法,对于两位提出的算法我其实一开始又考虑过,显然这是最基本的解决方法,但是如果能找到原地查找的算法何乐而不为呢?