zoukankan      html  css  js  c++  java
  • [LeetCode][JavaScript]Patching Array

    Patching Array

    Given a sorted positive integer array nums and an integer n, add/patch elements to the array such that any number in range [1, n] inclusive can be formed by the sum of some elements in the array. Return the minimum number of patches required.

    Example 1:
    nums = [1, 3]n = 6
    Return 1.

    Combinations of nums are [1], [3], [1,3], which form possible sums of: 1, 3, 4.
    Now if we add/patch 2 to nums, the combinations are: [1], [2], [3], [1,3], [2,3], [1,2,3].
    Possible sums are 1, 2, 3, 4, 5, 6, which now covers the range [1, 6].
    So we only need 1 patch.

    Example 2:
    nums = [1, 5, 10]n = 20
    Return 2.
    The two patches can be [2, 4].

    Example 3:
    nums = [1, 2, 2]n = 5
    Return 0.

    https://leetcode.com/problems/patching-array/


    组合nums数组中的数字以填满[1, n]的范围,如果有空缺的组合数字,需要补patch到nums数组中,求最少需要几个patch。

    https://leetcode.com/discuss/82822/solution-explanation

    贪心,从小到大填满[1, n],能用原来的nums中的数的时候就用掉,不够就补patch。

    举例来说,nums = [1, 5, 10], n = 40。

    首先就缺少了2,patch补2,此时范围是[1, 3],即1 ∪ 2 ∪ 1 + 2。

    这边还用不到5,patch补4,此时范围是[1, 7],即[1, 3] ∪ 4 ∪ [1 + 4, 3 + 4] 。

    5在的[1, 7]的范围里,可以用上5,此时范围是[1, 12],即[1, 7] ∪ [1 + 5, 7 + 5] 。

    10在的[1, 12]的范围里,用上10,此时范围是[1, 22],即[1, 12] ∪ [1 + 10, 12 + 10] 。

    patch补23,此时范围是[1, 45],即[1, 22] ∪ 23 ∪ [1 + 23, 22 + 23] 。

    最后需要3个patch[2, 4, 23]。

    代码按照这个思路实现,先看nums里的数能不能用上,如果不行就加一个patch。

     1 /**
     2  * @param {number[]} nums
     3  * @param {number} n
     4  * @return {number}
     5  */
     6 var minPatches = function(nums, n) {
     7     var countPatch = 0, numsIndex = 0;
     8     for(var i = 1; i <= n;){
     9         if(nums[numsIndex] < i){
    10             i += nums[numsIndex];
    11             numsIndex++;
    12             continue;
    13         }            
    14         if(nums[numsIndex] === i)
    15             numsIndex++;
    16         else
    17             countPatch++;
    18         if(i - 1 > 0)
    19             i += i - 1;
    20         i++;
    21     }
    22     return countPatch;
    23 };
  • 相关阅读:
    Form 中调用指定请求并给定默认参数
    OAF 汇总行的做法
    EBS 开发常用SQL
    EBS 中常用的配置文件及说明
    OAF 常见概念介绍
    OAF 多语言的实现
    OAF 个性化基础
    OAF 开发前置配置
    条款20 STL函数对象
    条款19 command 模式与好莱坞法则
  • 原文地址:https://www.cnblogs.com/Liok3187/p/5223236.html
Copyright © 2011-2022 走看看