You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求PHP实现整数重排以消除数值间隔的算法及代码示例

消除整数序列间隔转为连续序列的PHP实现

根据你的描述,你需要把带有间隔的整数序列转换成从1开始的连续整数序列——就像示例里[1,2,3,4,9,10,11,17...]转成[1,2,3,4,5,6,7,8...]这样。下面分两种常见场景给你提供可运行的PHP实现:

场景1:原序列无重复元素,直接生成对应长度的连续序列

如果你的输入序列是有序且没有重复元素的(和示例一致),最简单的实现就是直接生成从1到序列长度的连续数组:

<?php
// 示例输入
$originalSequence = [1, 2, 3, 4, 9, 10, 11, 17];
// 生成从1到序列长度的连续数组
$continuousSequence = range(1, count($originalSequence));

// 输出结果
print_r($continuousSequence);
?>

运行这段代码会输出:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
    [7] => 8
)

场景2:原序列包含重复元素,相同元素映射到同一连续整数

如果你的序列里有重复元素,需要让相同的原数字对应同一个连续整数,不同数字按出现顺序依次映射,那就用数组来记录映射关系:

<?php
// 含重复元素的示例输入
$originalSequence = [1, 2, 2, 4, 5, 5, 5, 9];
$numMapping = [];
$currentContinuousNum = 1;
$continuousSequence = [];

foreach ($originalSequence as $num) {
    // 若当前数字未建立映射,分配新的连续整数
    if (!isset($numMapping[$num])) {
        $numMapping[$num] = $currentContinuousNum++;
    }
    // 将映射后的值加入结果数组
    $continuousSequence[] = $numMapping[$num];
}

// 输出结果
print_r($continuousSequence);
?>

运行结果:

Array
(
    [0] => 1
    [1] => 2
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 4
    [6] => 4
    [7] => 5
)

额外提示

如果你的输入序列是无序的,但需要先按原数字大小排序再生成连续序列,只需在处理前先排序:

sort($originalSequence);
// 之后再执行上述场景1或场景2的逻辑即可

内容的提问来源于stack exchange,提问作者Roman01

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:33:14