如何筛选第二数组中无法由第一数组元素求和得到的值
问题分析与解决方案
嘿,这个问题其实可以先从数组元素的规律入手,很快就能找到答案!
首先看第一个数组,所有元素都是100000——这意味着不管你怎么选元素相加,得到的结果必然是100000的正整数倍,而且最多能凑出 9 * 100000 = 900000(毕竟数组里只有9个元素)。
接下来我们逐个检查第二数组里的数值:
- 500000:算一下,
500000 ÷ 100000 = 5,刚好是5个100000相加的结果,第一个数组够5个元素,所以这个值是可以凑出来的。 - 250000:
250000 ÷ 100000 = 2.5,不是整数——我们总不能把第一个数组里的元素拆成半个来加吧?所以这个值肯定凑不出来。 - 150000:同样的道理,
150000 ÷ 100000 = 1.5,不是整数,自然也无法通过第一个数组的元素求和得到。
代码验证示例(PHP)
如果需要用代码自动筛选出这些无法得到的值,可以参考下面的实现:
<?php $array1 = [100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000, 100000]; $array2 = [500000, 250000, 150000]; // 因为array1所有元素相同,取第一个作为基数 $baseValue = $array1[0]; $maxPossibleSum = count($array1) * $baseValue; $unreachableValues = []; foreach ($array2 as $target) { // 判断条件:要么不是基数的整数倍,要么需要的元素个数超过array1的长度 if ($target % $baseValue !== 0 || ($target / $baseValue) > count($array1)) { $unreachableValues[] = $target; } } print_r($unreachableValues); // 输出结果:Array ( [0] => 250000 [1] => 150000 ) ?>
这个思路的好处是不用写复杂的求和组合逻辑,利用第一个数组元素的一致性直接简化判断,效率很高。
内容的提问来源于stack exchange,提问作者copetganteng
相关产品推荐
相关产品推荐

