leetcode 5499 檢查數組對是否可以被K整除

題目

給你一個整數數組 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
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章