多个数组同顺序对比取得与原所有数组最少重复的所有数字,并自动填充为出现的制定范围内的数字
时间: 2024-02-18 12:04:30 浏览: 86
可以通过以下步骤实现多个数组同顺序对比取得与原所有数组最少重复的所有数字,并自动填充为出现的指定范围内的数字:
1. 将所有数组合并成一个新的数组。
2. 对新数组进行排序。
3. 遍历新数组,记录每个数字出现的次数。
4. 找到出现次数最少的数字,作为最少重复的数字。
5. 如果最少重复的数字不在指定范围内,则填充为指定范围内第一个未出现的数字。
6. 遍历新数组,找到所有与最少重复的数字相同的数字,并存储在一个新数组中。
7. 如果新数组中的数字个数等于原数组个数,则说明所有数组中的数字都与最少重复的数字相同,直接返回最少重复的数字。
8. 否则从新数组中筛选出所有不重复的数字作为结果返回。
以下是示例代码:
```php
<?php
function getLeastRepeat($arrs, $minNum, $maxNum)
{
// 合并数组
$newArr = call_user_func_array('array_merge', $arrs);
// 对数组进行排序
sort($newArr);
// 记录每个数字出现的次数
$countArr = array_count_values($newArr);
// 找到最少重复的数字
$leastRepeat = null;
$minCount = null;
foreach ($countArr as $num => $count) {
if ($minCount === null || $count < $minCount) {
$leastRepeat = $num;
$minCount = $count;
}
}
// 如果最少重复的数字不在指定范围内,则填充为指定范围内第一个未出现的数字
if ($leastRepeat < $minNum || $leastRepeat > $maxNum) {
for ($i = $minNum; $i <= $maxNum; $i++) {
if (!in_array($i, $newArr)) {
$leastRepeat = $i;
break;
}
}
}
// 找到所有与最少重复的数字相同的数字
$repeatArr = array();
foreach ($newArr as $num) {
if ($num == $leastRepeat) {
$repeatArr[] = $num;
}
}
// 如果所有数组中的数字都与最少重复的数字相同,则直接返回最少重复的数字
if (count($repeatArr) == count($newArr)) {
return array($leastRepeat);
}
// 筛选出所有不重复的数字作为结果返回
$resultArr = array();
foreach ($newArr as $num) {
if ($countArr[$num] == 1) {
$resultArr[] = $num;
}
}
return $resultArr;
}
// 示例
$arr1 = array(1, 2, 3, 4, 5);
$arr2 = array(2, 3, 6, 7, 8);
$arr3 = array(3, 4, 5, 9, 10);
$result = getLeastRepeat(array($arr1, $arr2, $arr3), 1, 10);
print_r($result);
```
上述代码中的 getLeastRepeat 函数接受三个参数:多个数组、指定范围的最小值和最大值。函数返回一个数组,包含所有最少重复的数字或未出现的数字。调用示例中假设指定范围为 1 到 10。
阅读全文