• 330. 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.

    本题基于在一个数列中,

    1+A1+A2+......+Ak >= Ak+1,则[1,k]连续

    public class Solution {
        public int minPatches(int[] nums, int n) {
            int miss = 1;
            int add  = 0;
            int i    = 0;
            while(miss <= n) {
                //两个条件<br>1. i < nums.length, 数组的全部累加和小于n<br>2. miss >= nums[i], 这条就是上面提到的数学原理
                if(i < nums.length && miss >= nums[i]) {
                    miss = miss + nums[i];
                    i++;
                }
                //如果累加的和小于nums[i+1],则补上这个sum(当条件不满足时,补上1+A1+A2+...+Ak)
                else {
                    add++;
                    //第一个miss是sum,第二个miss是要插入数组的值,新的miss是添加完这个数的sum
                    miss = miss + miss;
                }
            }
            return add;
            
        }
    }
    

      需要注意的是,这段Java代码在n取到极值232-1时,会有溢出,需要将int转换为long

  • 相关阅读:
    kubernetes(七)二进制安装-worker节点安装
    kubernetes(六)二进制安装-master节点安装
    B树
    Nginx反向代理无法达到效果原因
    AVL树
    平衡二叉搜索树
    二叉搜索树
    二叉树
    js-day06-jQuery事件和DOM操作-练习题
    js-day05-JSON-jQuery初体验
  • 原文地址:https://www.cnblogs.com/Raymond-Yang/p/5175421.html
Copyright © 2020-2023  润新知