绳子覆盖问题

来源:互联网 发布:网络态势感知研究 编辑:程序博客网 时间:2024/04/27 21:37

百度笔试题:数轴上从左到右有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)


原创粉丝点击