看板 Marginalman
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