我需要找到数组的模式,我的教授告诉我们使用另一个数组来保存每个数字的重复。这是我的模式功能:
int mode(int *arr, int s)
{
int num = arr[0];
int mod = num;
int modeCount[s];
int countMode = 1;
for(int count = 1; count < s; count++)
{
if(arr[count] == num)
modeCount[count - 1]++;
else
{
if(modeCount[count] > countMode)
{
countMode = modeCount[count - 1];
mod = num;
}
}
num = arr[count];
}
return mod;
}
使用像{1,5,3,5}这样的阵列我的模式是3。
我还应该提一下,如果有多种模式,我不必编码不同(教授说不要担心),如果没有模式,我必须返回-1,所以这段代码是不完整的。
任何人都对如何修复我的代码并使其有效有任何想法?
答案 0 :(得分:0)
如果数组的元素受s限制,你可以使用这个想法。
int mode(int* arr, int s)
{
int count[s + 1] = {0}; // The size is s + 1, in case the elements on the array belong to the interval [0, S]
for(int i = 0; i < s; ++i)
count[arr[i]]++;
int best = 0;
int mode = -1;
int numberOfElementsTied = 0;
for(int i = 0; i < s; ++i)
{
if( count[i] > best)
{
best = count[i];
mode = i;
numberOfElementsTied = 1;
}
else if( count[i] == best)
{
numberOfElementsTied++;
}
}
if(numberOfElementsTied == 1) return mode;
else return -1;
}