作者JIWP (神楽めあ的錢包)
看板Marginalman
標題Re: [閒聊] 每日leetcode
時間Sun Oct 6 10:11:43 2024
2491. Divide Players Into Teams of Equal Skill
給一個正整數矩陣SKILL,長度為偶數
將skill分成兩兩一組,每一組的總和相等
將每一組的兩個數字相乘
並把每組的結果相加
再回傳
如果沒辦法達成上述條件
請回傳-1
思路:
首先將skill所有元素相加得到sum
skill的長度為n
把sum/(n/2)
如果餘數非零則回傳-1
接著用hash map紀錄每個數字出現的次數
目標是兩個數字相加=sum/(n/2)
看是不是所有數字都可以配對到
可以的話就照題目得到答案
不行就回傳-1
golang code:
func dividePlayers(skill []int) int64 {
sum, n, cnt := 0, len(skill), 0
for _, val := range skill {
sum += val
}
if sum%(n/2) != 0 {
return -1
}
target := sum *2 /n
sum = 0
rec := make(map[int]int)
for _, val := range skill {
idx := target - val
if rec[idx] > 0 {
cnt+=2
rec[idx]--
sum += idx * val
} else {
rec[val]++
}
}
if cnt != n {
return -1
}
return int64(sum)
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.71.212.211 (臺灣)
※ 文章網址: https://www.ptt.cc/bbs/Marginalman/M.1728180705.A.CD1.html
推 DJYOSHITAKA: 別捲了 10/06 10:23