LeetCode之Set Mismatch(Kotlin)

350 阅读1分钟

问题:


方法: 遍历数组一遍,通过占坑法记录出现过的数字,重复出现的位置设为负数,最后获取到重复的数字,然后可以根据和的关系计算出缺失的数字。

具体实现:

class SetMismatch {
    fun findErrorNums(nums: IntArray): IntArray {
        val result = mutableListOf<Int>()
        var sum = 0
        for (value in nums) {
            val num = Math.abs(value)
            if (nums[num - 1] < 0) {
                result.add(num)
            } else {
                nums[num - 1] *= -1
            }
            sum += num
        }
        result.add(nums.size * (nums.size + 1) / 2 - sum + result[0])
        return result.toIntArray()
    }
}

fun main(args: Array<String>) {
    val setMismatch = SetMismatch()
    CommonUtils.printArray(setMismatch.findErrorNums(intArrayOf(8, 7, 3, 5, 3, 6, 1, 4)).toTypedArray())
}

有问题随时沟通

具体代码实现可以参考Github