int NewFunction(int array, int numValues){
int i;
int j;
for(i=0;i<numValues;i++){
for(j=i+1;j<numValues;j++){
if(
答案 0 :(得分:1)
首先,您可能想使用比NewFunction
更具描述性的名称。另外,该数组不应为int
类型,您可能正在寻找指向int的指针。
此外,您不需要像这样的嵌套循环:
for(i=0;i<numValues;i++){
for(j=i+1;j<numValues;j++){
想象一下,手动执行此操作,得到大约1000个数字的列表,试图连续查找三个。您多久浏览一次清单?最多一次,对吧?您不会遍历该列表一千次,因此您的算法也不会遍历该列表,因此这里不需要嵌套循环。
您正在寻找的东西是这样的:
int threeInARow(int* array, int numValues) {
int count = 1; // how many numbers in a row were found
int current = array[0]; // the number that we're looking for
int i = 1;
for (; i < numValues; i++) {
if (array[i] == current) {
if (++count == 3) return i - 2;
}
else { // a different number is found: start over
count = 1;
current = array[i];
}
}
return -1; // return a value indicating that no result was found
}
答案 1 :(得分:0)
从变量开始:您在哪里第一次看到的最后一个值。我们将其称为last
,并将其初始化为0。然后将index
从1迭代到数组的长度。如果index
与last
之差为3,则返回last
作为重复值的索引。如果不是,请检查index
是否长。如果是这样,则搜索失败。否则,如果当前索引处的值与last
处的值不同,则将last
设置为当前索引。
答案 2 :(得分:0)
另一种方法。
#include <stdio.h>
#define ELEMENT 14
int three_in_a_row(int arr[], int n) {
int i, index, count = 0, max = 0;
i = -1;
do {
i = i + 1;
if (arr[i] == arr[i + 1]) {
index = i-1; //because we want the first occurrence
count++;
if (count > max) max = count; // 3 elements in a row means that max must be 3-1
} else
count = 0;
} while (i < n - 2 && max != 3 - 1);
return (max == 2 ? index : -1);// -1 indicates no result
}
int main(void) {
int array[] = {1,10,1,4,4,8,8,8,7,8,8,9,9,2}, index3;
index3 = three_in_a_row(array, ELEMENT);
printf("%d\n", index3);
return (0);
}