我正在尝试编写一个程序来返回重复数字最长运行长度的整数值。 (例如,一个整数数组,如2,4,4,1,3,4,4,4,4,4,6,6,6将返回值5,因为5 4是最长的运行。)我已经尝试编写代码,但它不断返回我的数组中的元素总数。出了什么问题?
int length(int array[], int size)
{
int x = 0, max;
int result[size];
for (int i = 0; i < size; i++)
{
x = i + 1;
if (array[i] == array[x])
{
result[i] = x + 1;
}
if (result[i] > result[x])
{
max = result[i];
}
}
return max;
}
答案 0 :(得分:3)
此代码考虑整数运行,并返回最大运行长度。
int length(int array[], int size) {
int max = 1;
int current = 1;
int i;
for (i = 1; i < size; i++) {
if (array[i - 1] == array[i]) { /* the run continues */
current++;
max = current > max ? current : max;
} else { /* the run was broken */
current = 1;
}
}
return max;
}
答案 1 :(得分:2)
正如nachokk所说,首先对价值进行排序。之后,你可以这样做:
int max(int a, int b) { return a>b ? a : b; }
int get_highest_repetitition_length(int arr[], int arr_len) {
int len = 0, highest_len = 0;
for (int i=0; i<arr_len; i++) {
if (i>0 && arr[i-1] != arr[i]) {
highest_len = max(len, highest_len);
len = 0;
}
len++;
}
highest_len = max(len, highest_len);
return highest_len;
}
答案 2 :(得分:1)
希望这会有所帮助。如果要在不进行排序的情况下获得结果,则需要知道输入中的数字范围。假设范围来自[0 , size)
。
int get_max_rep(int array[], int size)
{
int* counter = (int *)malloc(sizeof(int)*size);
// initialize
for (int i = 0; i < size; ++i) {
counter[i] = 0;
}
int max = 0;
for (int i = 0; i < size; ++i) {
++counter[array[i]];
if(max < counter[array[i]])
max = counter[array[i]];
}
free(counter);
return max;
}
如果范围是[a,b),则a <那么你需要做一些额外的工作。此外,如果数组counter
的大小成为问题,那么您可以使用位向量作为替代。