求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
相关产品推荐
相关产品推荐

