数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
1 #include <iostream> 2 using namespace std; 3 4 int maxCover(int* a, int n, int l) 5 { 6 int maxCover = 1; 7 int begin = 0; 8 int end = 1; 9 while(end < n) 10 { 11 if(a[end] - a[begin] > l) 12 { 13 maxCover = (end - begin) > maxCover?(end - begin):maxCover; 14 begin++; 15 } 16 else 17 end++; 18 } 19 return maxCover; 20 } 21 22 23 int main() 24 { 25 int a[6] = {0,1,3,6,8,10}; 26 cout<<"最大的覆盖个数:"<<maxCover(a,6,8)<<endl; 27 return 0; 28 }