1. 程式人生 > >找出陣列中重複次數最多的數

找出陣列中重複次數最多的數

方法一:如果相同的數是連續出現

從第一個數開始,與它後面的數比較,如果相同,計算+1,如果不等,計數置為1.同時保持此時的計數次數和此時的元素;

#include<stdio.h>

int Search(int a[],int len)
{
	int max=0;//保持到目前為此出現次數最多的那個數
	int count=1;
	int maxnum=count;//儲存最大計數次
	int maxd;
  for(int i=0;i<len-1;i++)
  {
	   
	  max=a[i];
	  if(a[i+1]==max)
		  count++;
	  else
	  	  count=1;
	  if(count>maxnum)
	  {
        maxnum=count;
		maxd=max;
	  }
  }
  return maxd;
}

int main()
{
	int array[]={1,1,1,2,2,4,4,4,4,5,5,6,6,6,6,6};
    int lens=sizeof(array)/sizeof(array[0]);
	int num=Search(array,lens);
	printf("%d\n",num);
	return 0;
}
方法二:陣列中的數隨機排列
#include<iostream>
#include<map>
using namespace std;

bool findMostFrequentInArray(int *a,int size,int &val)
{
  if(size==0)
	  return false;
  map<int,int> m;
  for(int i=0;i<size;i++)
  {
	  if(++m[a[i]]>=m[val])
		  val=a[i];
  }
  return true;
}

int main()
{
	int a[]={1,1,2,2,4,4,4,4,5,5,6,6};
	int val=0;
	if(findMostFrequentInArray(a,12,val))
		cout<<val<<endl;
	int b[]={1,5,4,3,4,4,5,4,5,5,6};
	if(findMostFrequentInArray(b,12,val))
		cout<<val<<endl;
	int c[]={1,5,4,3,4,4,5,4,5,5,6,6,6,6,6};
		if(findMostFrequentInArray(c,15,val))
		cout<<val<<endl;
	return 0;
}