实现Leader数组与Member数组连续ID序列的关联映射
关联递增ID数组中的Leader与连续Member序列
现有两个元素为递增ID的扁平数组Leaders和Members,需要将每个Leader ID关联到Members数组中的一段连续ID序列;如果Leader的数量多于Members中可划分的连续序列数量,剩余Leader的关联值设为null。
示例输入
$leaders = [1,4,8,13]; $members = [2,3,5,6,7,9,10,11,12];
期望输出
$leaders = [ 1 => [2,3], 4 => [5,6,7], 8 => [9,10,11,12], 13 => null ];
解决方案(PHP实现)
function mapLeadersToMembers($leaders, $members) { $result = []; $memberPos = 0; $totalMembers = count($members); foreach ($leaders as $idx => $leaderId) { // 获取下一个Leader的ID,无则设为极大值 $nextLeader = $idx + 1 < count($leaders) ? $leaders[$idx + 1] : PHP_INT_MAX; $currentGroup = []; // 筛选当前Leader与下一个Leader之间的所有Member while ($memberPos < $totalMembers && $members[$memberPos] > $leaderId && $members[$memberPos] < $nextLeader) { $currentGroup[] = $members[$memberPos]; $memberPos++; } $result[$leaderId] = empty($currentGroup) ? null : $currentGroup; } return $result; } // 测试代码 $leaders = [1,4,8,13]; $members = [2,3,5,6,7,9,10,11,12]; print_r(mapLeadersToMembers($leaders, $members));
代码说明
- 遍历
Leaders数组时同步跟踪Members的遍历位置,避免重复扫描,保证执行效率 - 每个Leader对应的Member区间定义为:大于当前Leader ID且小于下一个Leader ID的所有连续Member
- 若某个Leader没有匹配到任何Member,直接将其关联值设为
null
内容的提问来源于stack exchange,提问作者Harlton Hinon
相关产品推荐
相关产品推荐

