【问题标题】:Add to array consecutive numbers添加到数组连续数字
【发布时间】:2010-11-15 22:36:02
【问题描述】:

这是我向 SO 提出的第一个问题,我希望能做对。在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 上,我找到了这些相关主题,但无法正常工作。

  1. Creating a list of lists with consecutive numbers
  2. Python finding n consecutive numbers in a list
  3. Find the sum of consecutive whole numbers w/o using loop in JavaScript

不工作的代码在版本历史记录中,我删除了它,因为它有格式问题。

感谢大家,尤其是 Juan、mistabell 和 Axsuul 提供正确答案。

【问题讨论】:

  • 这是一个真正的问题吗?看起来像家庭作业。
  • 你说不能让它工作?向我们展示您到目前为止的想法,也许我们可以发现问题。
  • @Marcelo Cantos 是的。基本上我正在尝试建立一个 webapp,但我被这个问题困住了(我是一名 UI 设计师,我现在才开始编程)。
  • 该死的。我有格式问题,请提示。
  • 附带说明,您真的应该删除所有对count 的调用,它是性能杀手,因此在 PHP 中调用它被认为是一种不好的做法在循环中(即使在检查循环条件时)。

标签: php arrays algorithm


【解决方案1】:

我能想到的最好的是:

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;
}

【讨论】:

    【解决方案2】:

    试试这个

    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] => 数组 ( [0] => 1 [1] => 2 [2] => 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
        )
    

    )

    【讨论】:

    • 我也遇到了格式问题。我尝试使用代码 html 标记,但它似乎不起作用。
    【解决方案3】:

    同意,对我来说,这就像一个标准的算法设计问题。 Eagleal,您是否尝试过为此考虑伪代码,然后将其转换为 PHP?如果两个给定的数字是连续的,您将如何从数学上(在您的脑海中)判断?提示:答案包括减法,甚至加法,以及数字 1。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-01
      • 1970-01-01
      • 2020-07-19
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 2014-02-15
      • 2021-03-25
      相关资源
      最近更新 更多