# 【算法分析】寻找多数元素

Java实现过程如下：

package candidate;

public class Candidate
{
// 递归实现
public int candidateSort(int[]a, int start, int end)
{
int c = a[start];
int count = 1;
int j;

for (j=start;j<end && count>0;j++)
{
if (c == a[j])
{
count++;
}
else {
count--;
}
}

if (j == end)
{
return c;
}
else {
return candidateSort(a, j+1, end);
}
}

// 循环实现
public int candidateSort(int[] a)
{
int c = a[0];
int count = 0;

for (int i=1; i<a.length;i++)
{
if (c == a[i])
{
count++;
}
else if (count < 0) {
c = a[i];
count = 0;
}
else {
count--;
}
}

return c;
}

// a[0...n-1]若存在多数元素则输出，否则输出-1
public int Majority(int a[], int n)
{
int c = candidateSort(a, 1, 7);
int count = 0;
int majority;

for (int i = 0; i < n; ++ i)
{
if (a[i] == c)
count++;
}

if (n%2 == 0)
majority = n/2 + 1;
else
majority = n/2;

if (count > majority)
return c;
else
return -1;
};

public static void main(String[] args)
{
int[] date = {1,3,2,3,3,4,3};
System.out.println(new Candidate().candidateSort(date, 0, date.length-1));
System.out.println(new Candidate().candidateSort(date));
System.out.println(new Candidate().Majority(date, 7));
}
}


3
3
3

• 广告
• 抄袭
• 版权
• 政治
• 色情
• 无意义
• 其他

120