1 回答

TA貢獻1816條經驗 獲得超4個贊
如果可以除法,為什么要乘法?
$arr = [1,2,3,4];
$product = array_product($arr);
$multiples = array_map(function($el) use ($product) { return $product / $el; }, $arr);
// var_dump($multiples);?
// array(4) { [0]=> int(24) [1]=> int(12) [2]=> int(8) [3]=> int(6) }
var_dump(array_sum($multiples));
簡而言之,想法是a * b * c
等于a * b * c * d / d
,?a * b * d
isa * b * c * d / c
等。唯一需要注意的是,當您處理大數時,可能會發生一些溢出,但這很容易在$product
計算步驟中發現。
好的,事實證明該任務比描述中提到的要多。如果是這種情況,并且您想要一個通用的解決方案,您可以考慮先創建所需所有元素的排列,然后計算所有排列的所有乘法之和。
盡管如此,對于這種特殊情況——“取一對元素,將它們相乘,然后計算總和”——還有另一個 O(n) 解決方案:
$arr = [1,2,3,4];
$sum = array_sum($arr);
$sum_of_multiples = array_reduce($arr, function($carr, $item) use (&$sum) {
? ? return $carr + $item * ($sum -= $item);
}, 0);
var_dump($sum_of_multiples); // int(35)
它基于一個簡單的事實,即對于數組的每個單獨元素,涉及它的倍數之和就是該元素乘以所有其他元素的總和。
- 1 回答
- 0 關注
- 151 瀏覽
添加回答
舉報