求连续数的算法题,求思路
php吧
全部回复
仅看楼主
level 10
Phper_瞬歩 楼主
[88]现有一个数组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
刚刚在练js五子棋的时候,判断连续棋子的数目卡壳了,顺便引申出了这个题目[88],也许以后会用到[揉脸]
2013年01月17日 06点01分
回复 Phper_瞬歩 :[大拇指]举一反三啊 少年
2013年01月17日 06点01分
回复 网络农夫§ :[打酱油]
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
<?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
@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
我是6L,补了一个用户名,好方便以后在这里交流。
我的思路是把结果分为几个数组,例如,0,1可以是一个数组,4,5,6,7可以一个数组。
然后判断你要几个连续的,count数组,相等的读取出来。
过程是先判断值,就是$v,如果他的键名-1后的值+1或者键名+1后的值-1跟他相等,那么
我们就把他放入临时变量$tmp中,然后再把$tmp放入$date[++$i][]中。
@Phper_瞬歩
2013年01月17日 09点01分 9
[Love] 嗯,思路很清晰,我试了下效果很好 [真棒]
2013年01月17日 10点01分
level 8
逻辑思维不行,抠圪了一下午.....,以后不逞能做难题了.
$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
[Kiss]每次都能带来惊喜 [呵呵]
2013年01月17日 10点01分
level 3
太简单了,懒得弄[鲁拉]
2013年01月17日 10点01分 11
[汗]
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