我试图编写一个获取整数列表并查找其中所有算术序列的函数。
A = [-1,1,3,3,3,2,1,0] 这个列表中有五个算术序列:(0,2),(2,4),(4,6),(4,7),(5,7) - 这些是序列的第一个和最后一个元素的索引。序列是由元素之间的差异导出的。
从上面的例子中可以看出 - 序列必须长于2个元素(否则它会在每两个元素之间找到一个序列)。
我需要编写的函数必须返回它在列表中找到的序列数 - 在这种情况下它应该返回5.
我有点卡住了 - 尝试了几种不同的方法但却失败了。我最近做的事情是:#include<stdio.h>
int main() {
// your code goes here
long int A[]={-1, 1, 3, 3, 3, 2, 1, 0};
//int N= sizeof(A)/sizeof(A[0]);
int N=8;
printf("%d", solution(A,N));
return 0;
}
int solution (long int A[], int N)
{
int numSlices=0;
int tot;
// Get the Consecutive Array
for(int iOut=0; iOut<N; iOut++)
{
int startIndex = iOut;
int endIndex;
long int diff;
for(int iIn=iOut; iIn<N-2; iIn++)
{
if((A[iIn]-A[iIn+1]) == (A[iIn+1]-A[iIn+2]))
continue;
else
{
endIndex = iIn+1;
iOut=endIndex+1;
printf ("SI = %d \t EI = %d \n", startIndex, endIndex);
break;
}
}
int ln=endIndex - startIndex;
if (ln >=3)
numSlices +=(ln-2)* (ln-1);
// 1*
}
return numSlices;
}
答案 0 :(得分:0)
这是一种更简单的方法。我发表评论以帮助您理解。
int solution (long int A[], int N)
{
int i;
int count = 0;
for (i = 0; i < N - 1; i++) {
int diff = A[i + 1] - A[i]; // get the difference of the current number to the next
int temp = i + 1;
// continue expanding the sequence as long as the difference is still the same
while (temp < N - 1 && A[temp + 1] - A[temp] == diff) {
count++;
printf("Sequence found: %d, %d\n", i, temp); // display the sequence
temp++;
}
}
return count;
}