求连续数的算法题,求思路
php吧
全部回复
仅看楼主
level 10
Phper_瞬歩
楼主
现有一个数组array(0,1,4,5,6,7,10,13,14,17,18,19,20,21,25);设计一个函数找出其中3个或以上的连续数字,如:4,5,6,7和17,18,19,20,21
2013年01月17日 06点01分
1
level 4
网络农夫§
我去 每天都有难题啊
2013年01月17日 06点01分
2
level 4
网络农夫§
在哪看的
2013年01月17日 06点01分
3
Phper_瞬歩
刚刚在练js五子棋的时候,判断连续棋子的数目卡壳了,顺便引申出了这个题目
,也许以后会用到
2013年01月17日 06点01分
网络农夫§
回复 Phper_瞬歩 :
举一反三啊 少年
2013年01月17日 06点01分
Phper_瞬歩
回复 网络农夫§ :
2013年01月17日 07点01分
level 10
Phper_瞬歩
楼主
没人吗
@PHP小二郎
2013年01月17日 07点01分
4
level 4
网络农夫§
二郎又被召唤了
2013年01月17日 07点01分
5
level 1
summer漫神
<?php$arr = array(0,1,4,5,6,7,10,13,14,17,18,19,20,21,25);function cc($arr,$num = 3) {$i = 0;$tmp;if(is_array($arr)){sort($arr);foreach ($arr as $k => $v){/*echo $v,"|";echo $arr[$k - 1] + 1,"|";echo $arr[$k + 1] - 1," ";*/if($v == $arr[$k - 1] + 1 || $v == $arr[$k + 1] - 1){$tmp = (int)$v;if (isset($date[$i]) && end($date[$i]) + 1 == $tmp){ $date[$i][] = $tmp;} else {$date[++$i][] = $tmp; }}}foreach($date as $k => $v){$l = count($v);if($l == $num) return $v;}}}$xx = cc($arr,5);echo "<pre>";print_r($xx);
2013年01月17日 09点01分
6
level 1
summer漫神
@Phper_瞬步 自己试下,在6L。
2013年01月17日 09点01分
7
level 9
沧桑如烟
array_flip 先把key value 互换。
把新的key(以前的value)自增形式循环, 用 array_key_exists 判断下一个key 是否存在在数组中,存在就记录下。
------------------------------------------------------------------------
或者直接遍历原数组,记录上一次值,跟本次遍历的值比,是否为1
-------------------------------------------------------------------------
2013年01月17日 09点01分
8
level 1
summer漫神
我是6L,补了一个用户名,好方便以后在这里交流。
我的思路是把结果分为几个数组,例如,0,1可以是一个数组,4,5,6,7可以一个数组。
然后判断你要几个连续的,count数组,相等的读取出来。
过程是先判断值,就是$v,如果他的键名-1后的值+1或者键名+1后的值-1跟他相等,那么
我们就把他放入临时变量$tmp中,然后再把$tmp放入$date[++$i][]中。
@Phper_瞬歩
2013年01月17日 09点01分
9
Phper_瞬歩
嗯,思路很清晰,我试了下效果很好
2013年01月17日 10点01分
level 8
PHP小二郎
逻辑思维不行,抠圪了一下午.....,以后不逞能做难题了.
$arr = array(0,1,4,5,6,7,10,13,14,17,18,19,20,21,25);
function three($arr) {
$tmp = array();
$res = array();
while(count($arr)) { // 只要数组还有值
$head = array_shift($arr); // 把数组最左端值拿出来
if(count($tmp) == 0) { // 如果tmp为空,直接把$head放入
$tmp[] = $head;
} else if(end($tmp) + 1 == $head){ // 如果非空,比较下
$tmp[] = $head;
} else {
if(count($tmp) >=3) {
$res[] = $tmp;
}
$tmp = array($head);
}
}
return $res;
}
print_r(three($arr));
Array
(
[0] => Array
(
[0] => 4
[1] => 5
[2] => 6
[3] => 7
)
[1] => Array
(
[0] => 17
[1] => 18
[2] => 19
[3] => 20
[4] => 21
)
)
2013年01月17日 09点01分
10
Phper_瞬歩
每次都能带来惊喜
2013年01月17日 10点01分
level 3
帅哥超神录
太简单了,懒得弄
2013年01月17日 10点01分
11
Phper_瞬歩
2013年01月17日 10点01分
level 3
帅哥超神录
$arr=array(0,1,4,5,6,7,10,13,14,17,18,19,20,21,25);
$arr2=array();
$arr3=array();
for($i=count($arr);$i>0;$i--){
$k=$i-1;
if($arr[$i]-$arr[$k]==1){
array_push($arr2,$i);
if(count($arr2)>=3){
array_push($arr3,$arr2);
}
}else{
$arr2=array();
}
}
print_r($arr3);
早晨研究了下,百度贴代码好麻烦。。。
2013年01月18日 00点01分
13
1