数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。

来源:互联网 发布:知牛财经直播违法吗 编辑:程序博客网 时间:2024/04/29 16:30

数轴上从左到右有n个点a[0],a[1],a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)

void maxCover(int* a, int n, int l) {

   int maxCover = 1;

   int beginPos = 0, endPos = 1;

   while (endPos <= n – 1 ) {

       if (a[endPos] – a[beginPos] >= l) {        

          If (a[endPos] – a[beginPos] == l ) {

             maxCover = endPos–beginPos + 1; // 正好

          } elseif (a[endPos] – a[beginPos] > l ) {

             maxCover = endPos–beginPos; // 回退一个点

          } 

          beginPos++; // 起点右移一位

       }

       endPos++;

   }

   return maxCover;

}

原创粉丝点击