C 查找整数序列中距离D的范围内有多少对数字
让我们有一个不同的非负整数{0,2,3,4,7,10,12}的递增序列。判断一段距离内最多有多少对的最快方法是什么?假设D=3 例如,这里是[0,2],[0,3],[2,3],[2,4],[3,4],[4,7],[7,10],[10,12],所以是8 我对此的看法是:C 查找整数序列中距离D的范围内有多少对数字,c,algorithm,C,Algorithm,让我们有一个不同的非负整数{0,2,3,4,7,10,12}的递增序列。判断一段距离内最多有多少对的最快方法是什么?假设D=3 例如,这里是[0,2],[0,3],[2,3],[2,4],[3,4],[4,7],[7,10],[10,12],所以是8 我对此的看法是: int arr[] = {0, 2, 3, 4, 7, 10, 12}; int arrLength = 7; int k = 1; int D = 3; int sum = 0; for (int i = 0; i <
int arr[] = {0, 2, 3, 4, 7, 10, 12};
int arrLength = 7;
int k = 1;
int D = 3;
int sum = 0;
for (int i = 0; i < arrLength;) {
if (i + k < arrLength && arr[i + k] - arr[i] <= D) {
sum++;
k++;
}
else {
i++;
k = 1;
}
}
printf("Number of pairs: %d\n", sum);
intarr[]={0,2,3,4,7,10,12};
int arrLength=7;
int k=1;
int D=3;
整数和=0;
对于(int i=0;i 如果(i+kM(n)
是指定对的数量,我们将有M(n)=M(n-1)+A[0..n-2]与A[n-1]的对的数量,其中A[n-1]小于D
。要找到递归的最后一部分,可以通过log(n)来计算因此,该算法的时间复杂度是T(n)=T(n-1)+log(n)=O(n log(n))
else
子句非常悲观。您不需要将k
重置为1。显然a[i+1]
与[i+2,i+k]中的所有值形成一对<代码>范围。考虑一个滑动窗口,沿着(未测试)行。
i=0;
j=1;
而(我 i = 0;
j = 1;
while (i < arrLen) {
while (j < arrlen && a[j] - a[i] <= D) {
j++;
}
i++;
sum += j - i;
if (i == j) {
j++;
}
}