实现一个返回1或0的最长序列及其第一个索引的函数

时间:2017-01-10 22:40:55

标签: c arrays function pointers

我需要编写一个函数,返回给定数组(1s和0s)的1s或0s的最长序列。它还需要在指针中返回这个最长序列开始的索引。

比方说,我有数组

a[]={1, 0, 0, 0, 1, 0, 0, 1}

该函数返回

3, 1

其中3是最长的序列(在这种情况下是0),1是它开始的索引。

我做的是:

int longestSequence(int a[], int n, int* begin)
{
int count=1;
int max_length=1;
int i;

for(i=1;i<n;i++)
{
    if(a[i]==a[i-1])
    {
        count+=1;
    }
    else if (count>max_length)
    {
        max_length=count;
        count=1;
    }
    else
    {
        count=1;
    }
}

if(count>max_length)
   {
       max_length=count;
   }
return max_length;
}

我尝试了几个例子来查看函数是否返回最长的序列并且它是否有效。但是,我无法找到一种方法来返回它开始的正确索引。

非常感谢任何帮助。

3 个答案:

答案 0 :(得分:3)

试试这个:

int longestSequence(int a[], int n, int *begin){
    int i, count, max_length = 1;
    *begin = 0;

    for(i = 0; i + max_length < n; i += count){
        for(count = 1; i + count < n && a[i] == a[i + count]; ++count)
            ;
        if(count > max_length){
            max_length = count;
            *begin = i;
        }
    }
    return max_length;
}

答案 1 :(得分:0)

你的代码几乎可以运作。

max_index = i - count;下方添加max_length=count;(两个地方)

还在顶部附近定义int max_index;

答案 2 :(得分:0)

尝试这个小编辑:

int longestSequence(int a[], int n, int* begin)
{
int count=1;
int max_length=1;
int out_index = 0;
int i;

for(i=1;i<n;i++)
{
    if(a[i]==a[i-1])
    {
        count+=1;
    }
    else if (count>max_length)
    {
        max_length=count;
        out_index = i - count;
        count=1;
    }
    else
    {
        count=1;
    }
}

if(count>max_length)
{
       max_length=count;
       out_index = i - count;
}
*begin = out_index;
return max_length;
}