美文网首页
LeetCode之Patching Array(Kotlin)

LeetCode之Patching Array(Kotlin)

作者: 糕冷羊 | 来源:发表于2019-12-18 14:21 被阅读0次

问题:



方法:
假设 miss 是缺少的数字中最小的,则区间 [1, miss) (左闭右开) 已经被完全覆盖。为了覆盖 miss,我们需要添加某些小于等于 miss 的数字。否则将不可能覆盖到。
假设我们添加的数字是 xx,则区间 [1, miss) 和 [x, x + miss) 均被覆盖到。由于我们知道 x <= miss,这两个区间必然覆盖了区间 [1, x + miss)。我们希望能够尽可能选择大的 xx,这样覆盖的范围就可以尽可能大。因此,最好的选择是 x = miss。
在覆盖到 miss 后,我们可以重新计算覆盖范围,查看新的最小的缺少数字。然后加上该数字。重复操作直到全部数字都被堵盖到。
具体实现:

class PatchingArray {
    fun minPatches(nums: IntArray, n: Int): Int {
        var count = 0
        var miss = 1L
        var i = 0
        while (miss <= n) {
            if (i <= nums.lastIndex && nums[i] <= miss) {
                miss += nums[i++]
            } else {
                count++
                miss += miss
            }
        }
        return count
    }
}

fun main(args: Array<String>) {
    val nums = intArrayOf(1, 2, 31, 33)
    val n = 2147483647
    val patchingArray = PatchingArray()
    println(patchingArray.minPatches(nums, n))
}

有问题随时沟通

具体代码实现可以参考Github

相关文章

  • LeetCode之Patching Array(Kotlin)

    问题: 方法:假设 miss 是缺少的数字中最小的,则区间 [1, miss) (左闭右开) 已经被完全覆盖。为了...

  • 2019-03-14

    LeetCode 330. Patching Array Description Given a sorted p...

  • Leetcode - Patching Array

    My code: reference:https://discuss.leetcode.com/topic/355...

  • LeetCode 330-Patching Array

    分析 miss记录当前集合已经完成[0, miss)所有组合。 当前值nums[i]小于等于miss时,表示在集合...

  • patching array

    patching array to cover 1 ~ n via operate '+' inside

  • Patching Array

    题目来源给一个数组array和一个数n,要求最多加入几个元素才能使得array中的子集元素和能够构成从1-n的数。...

  • LeetCode之Rotate Array(Kotlin)

    问题: 方法:最简单的方法如下所示,可以每次移动一个位置,只保存一个元素,但算法复杂度是O(kn)。优化算法是三重...

  • LeetCode之Monotonic Array(Kotlin)

    问题: 方法:很简单的一道题,先判断是递增还是递减,然后遍历一遍数组,如果其中元素有不满足的则返回false,否则...

  • LeetCode之Sort an Array(Kotlin)

    问题: 方法:这题用了快速排序,当然堆排序或者归并排序都可以,本质上都是利用了二分的思想。 具体实现: 有问题随时...

  • 8.19 - hard - 68

    330. Patching Array 又是一道greedy的题目

网友评论

      本文标题:LeetCode之Patching Array(Kotlin)

      本文链接:https://www.haomeiwen.com/subject/xhhunctx.html