/**
* @param $data 待查找数组
* @param $rLen 绳子长度
*/
function getRopeNum($data,$rLen) {
$n = count($data);
//当前最大个数
$max = 0;
$i = 0;
$cur = 0;
while($i < $n - $max){
for($j = $cur;$j < $n -$i;$j++){
if($j == 0){
//len为0,无须比较
$cur++;
continue;
}
if($data[$i+$j] - $data[$i] <= $rLen){
//小于rLen 当前数量加1
$cur++;
}
else{
if($cur > $max){
//调整当前最大个数
$max = $cur;
}
//寻找下一个,当前个数减1
$cur = $j-1;
break;
}
}
$i++;
}
return $max;
}
1、首先抽象下题目,覆盖绳子,就是需要找一段长度小于绳子长度的区间,输出符合要求的最多元素个数的区间。
2、区间的长度就是区间上确界减去下确界
3、学习KMP思想,不做重复的比较