数轴上从左到右有n个点、a[0] a[1]……a[n-1]给定一根长度为l绳子、求绳子最多覆盖其中几个点
2013-10-06 16:46
232 查看
算法描述:
maxCover=1 , coverNum = 0 ,beginPos=0,endPos=1 分别表示最多覆盖点数,当前遍历开始节点和结束点
1 如果a[endPos] – a[beginPos]== l 这个是时候正好覆盖coverNum = endPos–beginPos + 1; 右移动beginPos++;endPos++;
2 如果a[endPos] – a[beginPos]> l 这个时候超过了需要回退coverNum= endPos–beginPos; 向右移动beginPos++;endPos++;
3 如果coverNUm >maxCover 更新maxCover = coverNum
4 如果a[endPos] –a[beginPos] < L ,endPos++;
循环直到endPos <= n – 1
maxCover=1 , coverNum = 0 ,beginPos=0,endPos=1 分别表示最多覆盖点数,当前遍历开始节点和结束点
1 如果a[endPos] – a[beginPos]== l 这个是时候正好覆盖coverNum = endPos–beginPos + 1; 右移动beginPos++;endPos++;
2 如果a[endPos] – a[beginPos]> l 这个时候超过了需要回退coverNum= endPos–beginPos; 向右移动beginPos++;endPos++;
3 如果coverNUm >maxCover 更新maxCover = coverNum
4 如果a[endPos] –a[beginPos] < L ,endPos++;
循环直到endPos <= n – 1
#include<iostream> using namespace std; int maxCoverNum(int *a, int n, int l) { int maxCover = 1; int begin = 0; int end = 1; while ( end < n ) { if (a[end]-a[begin] >= l) { if (a[end]-a[begin] == l) { maxCover = end - begin + 1 > maxCover ? end -begin + 1 : maxCover ;} else if (a[end]-a[begin] > l) {maxCover = end - begin > maxCover ? end -begin : maxCover ;} begin++; } else end++; } return maxCover; } int main() { int a[8]={0,1,3,4,5,7,8,9}; cout<<"最大的覆盖个数: "<<maxCoverNum(a,8,2)<<endl; return 0; }
相关文章推荐
- [经典面试题][百度]数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。
- 数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
- [经典面试题][百度]数轴上从左到右有n各点a[0], a[1], ……,a[n -1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。
- 数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
- 数轴上从左到右有n个点a[0],a[1]…,a[n-1],给定一根长度为L的绳子,求绳子最多能覆盖其中的几个点。要求算法复杂度为o(n)。
- 给定一系列x轴的点坐标,例如 1,3,7,8,9,11这些坐标升序放在数组中,现在给一根绳子,长度为4,问绳子最多能覆盖的点数有多少,例如绳子放前面只能覆盖两个点,1,3,如果放后面能覆盖4个点。
- 坐标轴上从左到右依次的点为a[0]、a[1]、a[2]……a[n-1],设一根木棒的长度为L,求L最多能覆盖坐标轴的几个点?
- 坐标轴上从左到右依次的点为a[0]、a[1]、a[2]……a[n-1],设一根木棒的长度为L,求L最多能覆盖坐标轴的几个点?
- 数轴上n个点(a0,a1,.....an),长为L的绳子最多能覆盖多少个点。
- 对于给定的数组,统计出其中最多的元素的值
- 一根绳子长度为n,1到10对应cost
- 绳子可以覆盖的最多点数
- 给定一个固定长度的数组,将递增整数序列写入这个数组。当写到数组尾部时,返回数组开始重新写,并覆盖先前写过的数,请在这个特殊数组中找出给定的整数
- 数轴上覆盖最多点的数目
- 给定一个只包含大写英文字母的字符串,可以用另一个字母替换字符串中的任何字母最多k次。查找包含所有重复字母的最长子字符串的长度,
- Java实现给定任一字符串,长度为任意,要求找出其出现次数最多的字符及其出现次数。
- 平面上n个点,半径为r的圆最多能覆盖几个点
- 面试题:给定一个长度为N的数组,其中每个元素的取值范围都是1到N。判断数组中是否有重复的数字
- 【小米校招笔试】给定一些线段,线段有起点和终点,求这些线段的覆盖长度,重复的部分只计算一次
- 给定n个正整数,找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。