3

我正在尝试编写一个程序来返回重复数字的最长运行长度的整数值。(例如,整数数组,例如 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;
}
4

3 回答 3

4

此代码考虑整数的运行,并返回最大运行长度。

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;
}
于 2013-06-10T05:26:09.427 回答
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;
}
于 2013-06-10T04:04:46.633 回答
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 < b 那么你需要做一些额外的工作。此外,如果数组的大小counter成为问题,那么您可以使用位向量作为替代方案。

于 2013-06-10T04:19:18.597 回答