https://leetcode.com/problems/array-partition Easy

Решение

class Solution {
    fun arrayPairSum(nums: IntArray): Int {
        val off = 10000
        val cnt = IntArray(20001)
        var i = 0
        while (i < nums.size) { cnt[nums[i] + off]++; i++ }
        var take = true
        var ans = 0
        var v = 0
        while (v <= 20000) {
            val c = cnt[v]
            if (c != 0) {
                val valv = v - off
                ans += if (take) valv * ((c + 1) ushr 1) else valv * (c ushr 1)
                if ((c and 1) == 1) take = !take
            }
            v++
        }
        return ans
    }
}