I need to find the longest sequence of the same value in the array and return the length of this sequence. For example, for the int tab[] = {2, 2, 4, 4, 4, 2, 2, 1, 3};answer should be 3, because we have three fours. However, my code always returns 0, and I don't know why:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int longest_sequence(int *tab, int n)
{
int previous_len = 0, len = 0;
int i;
for(i=0; i<n; i++)
{
if(tab[i+1] == tab[i])
{
len ++;
if (len > previous_len)
{
previous_len = len;
}
}
else
{
previous_len = len;
len = 0;
}
}
return len;
}
int main()
{
int tab[] = {2, 2, 4, 4, 4, 2, 2, 1, 3};
int n = 9;
int res = longest_sequence(tab, n);
printf("%d\n", res);
return 0;
}
EDIT
Some errors have been changed, as indicated in the comments, however the result is now 1:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int longest_sequence(int *tab, int n)
{
int previous_len = 1, len = 1;
int i;
for(i=0; i<n-1; i++)
{
if(tab[i+1] == tab[i])
{
len ++;
printf("len = %d\n", len);
if (len > previous_len)
{
previous_len = len;
}
}
else
{
previous_len = len;
len = 1;
}
}
return len;
}
int main()
{
int tab[] = {2, 2, 4, 4, 4, 2, 2, 1, 3};
int n = 9;
int res = longest_sequence(tab, n);
printf("%d\n", res);
return 0;
}
EDIT
It seems ok now :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int longest_sequence(int *tab, int n)
{
int previous_len = 1, len = 1, max = 0;
int i;
if(n == 0)
{
return 0;
}
else
{
for(i=0; i<n-1; i++)
{
if(tab[i+1] == tab[i])
{
len ++;
if (len > previous_len)
{
previous_len = len;
}
}
else
{
previous_len = len;
len = 1;
}
if(len > max)
max = len;
}
return max;
}
}
int main()
{
int tab[] = {2, 2, 4, 4, 4, 2, 2, 2, 2, 1, 3};
int n = 11;
int res = longest_sequence(tab, n);
printf("%d\n", res);
return 0;
}