有一个数组,如:array(103,109,35,66,2,3,58,37,99,38,101,102,36);求出其中连续值的最大长度,该数组中最大长度的连续值为(35,36,37,38)所以长度是4,请问该怎么写?
解决方案 »
- mysql_fetch_array(): supplied argument is not a valid MySQL result resource
- 在“正则表达式”里有个“分组”的概念,用()实现的,请问,这个“分组”的作用是什么啊?
- PHPSocket的通讯问题
- 关于php的一点点理解,希望得到大虾门帮助,进者有分啊.
- 请问如何实现用用户的用户名来生成二级域名
- PHP生成HTML的内容分页问题请教!!在线等!!
- 如何得到变量名,比如$anyname得到字符串的anyname?
- 这段程序肯定有错,但就是不知道错在那里,大家帮帮忙,
- 菜鸟想一个问题好几天了
- 请问PHP4.2.1的模块(extensions目录中的各种.DLL文件)怎样使用?
- preg_match('/*+(swf)$/i',$_FILES["upfile"]["name"]) 为什么不行??
- 关于无限分级的层级问题,请教~~~
<?php
$a = array(103,109,35,66,2,3,58,37,99,38,101,102,36);
$b[] = $a[0];
$maxlen = 1;
for($i = 1;$i<count($a);$i++)
{
if(in_array(($a[$i]-1),$b))
{
$b[] = $a[$i];
if(count($b)>$maxlen)
{
$maxlen = count($b);
}
}
else
{
$b = array();
$b[] = $a[$i];
}
}
echo 'max successive length:'.$maxlen;
?>
$a = array(103,109,35,66,2,3,58,37,99,38,101,102,36);
sort($a);
$b[] = $a[0];
$maxlen = 1;
for($i = 1;$i<count($a);$i++)
{
if(in_array(($a[$i]-1),$b))
{
$b[] = $a[$i];
if(count($b)>$maxlen)
{
$maxlen = count($b);
}
}
else
{
$b = array();
$b[] = $a[$i];
}
}
echo 'max successive number length:'.$maxlen;
?>
1. 从小到大排序
2. 转换成对应的字符串,每个数用加好(+)表示,不连续的地方插入一个减号(-)
3. 用减号(-)对字符串进行分割,得到的子串分别计算出长度
4. 对长度值的数组进行从大到小的排序,取第一个值代码如下:
$a = array(103,109,35,66,2,3,58,37,99,38,101,102,36);
sort( $a );
$last = $a[0] - 1;
$str = '';
foreach ( $a as $v ) {
$str .= ( $v != $last + 1 ) ? '-+' : '+';
$last = $v;
}
$b = array_map( strlen, explode( '-', $str ) );
rsort( $b );
echo $b[0];■□■□■□■□■□■□■□■
□ □
■ 忍以明志 勤以致远 ■
□ □
■□■□■□■□■□■□■□■
基于CSDN论坛提供的插件扩展功能,自己做了个签名档工具,分享给大家,欢迎技术交流 :)