我需要编写一个函数,返回给定数组(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;
}
我尝试了几个例子来查看函数是否返回最长的序列并且它是否有效。但是,我无法找到一种方法来返回它开始的正确索引。
非常感谢任何帮助。
答案 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;
}