首页 > 其他 > 详细

LeetCode 330. Patching Array

时间:2020-03-14 20:50:59      阅读:59      评论:0      收藏:0      [点我收藏+]

题目

题意:给你一个数组,问你还要加上多少个数字,可以让1-n中的人一个数字都可以由数组里的一些元素相加得来

题解:首先考虑这样一个情况,假设在数组的某个位置i上,已经满足了1~k的所有组合都在里头,那么到下一个元素i+1
将会有1~k+nums[I]的所有组合都可以找到,前提是nums[i]+1<=k。那如果nums[i]+1>k 怎么办呢?这个时候就是需要添置元素的时候了
我们添加一个元素k+1,再次得到1~k+k+1 此时k=k+k+1,再判断k和nums[i]+1的大小,直到nums[i]+1<=k

      要注意有超int的情况
typedef long long int _int;
class Solution {
public:
    int minPatches(vector<int>& nums, int n) {
        
        _int start = 1;
        _int pre=0;
        
        int ans=0;
        
        for(int i=0;i<nums.size();i++)
        {
            
            while(start<nums[i])
            {
                ans++;
                start = start + pre;
                pre=start;
                if(pre>=n)
                    return ans;
                start++;
            }
            
            start = (_int)nums[i] + pre;
            pre = start;
            start++;
            if(pre>=n)
                return ans;
        }
        
        
        while(start<=n)
        {
            ans++;
            start=start+pre;
            pre=start;
            start++;
        }
        
        return ans;
        
    }
};

LeetCode 330. Patching Array

原文:https://www.cnblogs.com/dacc123/p/12493921.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!