百度笔试题:数轴上从左到右有n各点a[0],a[1],……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。
维护两个指针,依次固定右边的指针,当左右指针所指的点的差值比绳子长时,右移左边的指针,记录下差值比绳子短时的左右指针距离。
代码如下:
int func(int a[], int n, int L)
{
int i = 0;
int maxLen = 0;
for (int j = 0; j < n; j++)
{
while (a[j] - a[i] > L)
i++;
if (maxLen < (j - i + 1))
maxLen = j - i + 1;
}
return maxLen;
}
时间复杂度为O(N)