題目
給你一個整數數組 arr 和一個整數 k ,其中數組長度是偶數,值爲 n 。
現在需要把數組恰好分成 n / 2 對,以使每對數字的和都能夠被 k 整除。
如果存在這樣的分法,請返回 True ;否則,返回 False 。
示例 1:
輸入:arr = [1,2,3,4,5,10,6,7,8,9], k = 5
輸出:true
解釋:劃分後的數字對爲 (1,9),(2,8),(3,7),(4,6) 以及 (5,10) 。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/check-if-array-pairs-are-divisible-by-k
分析
所有餘數都將在0到k之間。而k-i和i這兩個數的個數,決定了這一對是否能k整除。兩者相等則配對求和不會有剩下的。 最後mod[0]則是所有爲k的整數倍的數個數,如果他們不爲偶數,則同樣意味着配對時候,有一個會被剩下來,與其他0到k-1的數據配對,這樣是不滿足題目的。
解法
func canArrange(arr []int, k int) bool {
mod := make([]int, k)
for _, num := range arr {
mod[(num%k+k)%k]++
}
for i:= 1; i < k/2+1; i++ {
if mod[i] != mod[k-i] {
return false
}
}
return mod[0] % 2 == 0
}