• [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 };
  • 相关阅读:
    【7】用Laravel5.1开发一个简单的博客系统
    【6】Laravel5.1的migration数据库迁移
    【5】说说Laravel5的blade模板
    【4】优化一下【3】的例子,顺便说说细节
    【3】创建一个简单的Laravel例子
    【2】最简单的Laravel5.1程序分析
    【1】Laravel5.1 安装
    【0】Laravel 5.1 简介
    MySQL常用命令
    Windows8.1使用博客客户端写博客
  • 原文地址:https://www.cnblogs.com/Liok3187/p/5223236.html
Copyright © 2020-2023  润新知