題目連結(jié):
題目意譯:
你被給定一個(gè)偶數(shù)長度 n 的正整數(shù)陣列 skill,其中 skill[i] 代表第 i 個(gè)玩家的技能值。將玩家們分成 n / 2 個(gè)且每個(gè)大小為 2 之隊(duì)伍,使得每一隊(duì)的技能值總和是一樣的。
一個(gè)隊(duì)伍的契合度(chemistry)等於該隊(duì)伍中的玩家技能值之乘積。
回傳所有隊(duì)伍的契合度總和。如果沒有任何方式可以將玩家分成技能值總和相同的隊(duì)伍,則回傳 -1。
限制:
2 ≦ skill.length ≦ 10 ^ 5
skill.length 為偶數(shù)。
1 ≦ skill[i] ≦ 1000
範(fàn)例測資:
範(fàn)例 1:
輸入: skill = [3,2,5,1,3,4]
輸出: 22
解釋:
將玩家分成下列隊(duì)伍:(1, 5) 、 (2, 4) 、 (3, 3),其中每一隊(duì)有著技能值總和 6。
每一隊(duì)伍的契合度總和:1 × 5 + 2 × 4 + 3 × 3 = 5 + 8 + 9 = 22。
範(fàn)例 2:
輸入: skill = [3,4]
輸出: 12
解釋:
兩個(gè)玩家形成一個(gè)隊(duì)伍,其技能值總和為 7。
該隊(duì)伍契合度為 3 × 4 = 12。
範(fàn)例 3:
輸入: skill = [1,1,2,3]
輸出: -1
解釋:
不存在任何方式可以將玩家分成技能值總和相同的隊(duì)伍。
解題思維:
首先,如果每一隊(duì)技能值總和一樣則代表其每一隊(duì)的總和之值應(yīng)為 2 × (S ÷ n)(稱此值為 A),其中 S 為所有玩家的技能值總和。
而如果真的存在這樣子的隊(duì)伍分配,則只會(huì)有唯一一種分配方式(前提是把相同技能值的玩家視為「相同」),因?yàn)橛兄寄苤?X 的玩家必須與有著技能值 A - X 的玩家。而這個(gè)「原因」也是我們怎麼找到分配方式的方法:
我們只需要先把 skill 由小排到大,然後第一小的技能值配對到第一大的技能值、第二小到第二大、……,而只要有配對的技能值總和不為 A 則代表我們找不到合法的分配方式,所以直接回傳 -1 即可。
而如果每一隊(duì)總和都是 A,則算出它們的契合度加總即為所求。
此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。