这是我的第一个问题,我希望能够做到。在PHP中(如果你不能,python或伪语言也可以),给定一个n元素的数组:
old_array = [1, 2, 3, 5, 7, 8, 9, 20, 21, 23, 29]
我需要添加一个新的数组连续数字,如果它不是一个连续数字,只将该值添加到一个新数组:
new_array = [ [1,2,3],
[5],
[7,8,9]
[20,21]
[23],
[29]
]
在SO上,我找到了这些相关的主题,但无法让它发挥作用。
无效的代码在版本历史记录中,我将其删除,因为它存在格式问题。
感谢所有人,特别是Juan,mistabell和Axsuul提供了正确答案。
答案 0 :(得分:4)
我能想到的最好的是:
function subsequenceArray($values) {
$res = array();
$length = count($values);
if (0 == $length) {
return $res;
}
$last = 0;
$res[$last] = array($values[0]);
for ($i = 1; $i < $length; $i++) {
if ($values[$i] == $values[$i-1] + 1) {
$res[$last][] = $values[$i];
} else {
$res[++$last] = array($values[$i]);
}
}
return $res;
}
答案 1 :(得分:1)
试试这个
function buildPairedArray($oldArray) {
$newArray = array();
$i = 0;
foreach ($oldArray as $index => $value) {
if ($index == 0) {
$newArray[$i][] = $value;
continue;
}
if ($oldArray[$index] == $oldArray[$index-1]+1) { // consecutive
$newArray[$i][] = $value;
} else {
$newArray[++$i][] = $value;
}
}
return $newArray;
}
测试
$old = array(1, 2, 3, 5, 7, 8, 9, 20, 21, 23, 29);
print_r(buildPairedArray($old));
结果:
阵 ( [0] =&gt;排列 ( [0] =&gt; 1 [1] =&gt; 2 [2] =&gt; 3 )
[1] => Array
(
[0] => 5
)
[2] => Array
(
[0] => 7
[1] => 8
[2] => 9
)
[3] => Array
(
[0] => 20
[1] => 21
)
[4] => Array
(
[0] => 23
)
[5] => Array
(
[0] => 29
)
)
答案 2 :(得分:0)
同意,对我来说感觉像是一个标准的算法设计问题。 Eagleal,您是否尝试过使用伪代码进行思考,然后将其转换为PHP?如果两个给定的数字是连续的,你会如何在数学上(在你脑中)说出来?提示:答案涉及减法,甚至是加法,数字为1。