Leetcode PHP題解--D14 561. Array Partition I
561. Array Partition I
題目連結
題目分析
本題給了一個數組,要求將陣列分為n個只有2個元素的一對。
使得每對數字中最小的數加起來的和最大。
思路
首先,需要把陣列分為2個一對。用array_chunk
即可。
其次,需要取每對數字中最小的那一個數字,用於求和。
因為我們需要最終求和最大,但每組數字中又取最小。
因此,要使每組中最大的數字和最小的陣列之差最小,這樣才能使“損失”最小。
例如,[1,2,7,8]
。
若分為[[1,8],[2,7]]
或[[1,7],[2,8]]
兩組,那麼每組取最小後,會得到[1,2]
。求和後為3。
當比較大的數字和比較小的數字數字組成一對時,較大的數字都沒辦法用於求和(因為題目要取每組數字中最小的數)。
當分為[[1,2],[7,8]]
兩組時,每組取最小後,會得到[1,7]
。求和後為8,比3大。
故,先對陣列排序,再兩兩分組,從每組中獲取第0個元素參與計算即可。
最終程式碼
<?php class Solution { function arrayPairSum($nums) { sort($nums); $a = array_chunk($nums,2); return array_sum(array_column($a,0)); } }
若覺得本文章對你有用,歡迎用愛發電 資助。