如何找到阵列中最长跑的长度?

时间:2013-06-10 03:46:36

标签: c arrays integer

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

3 个答案:

答案 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的大小成为问题,那么您可以使用位向量作为替代。