前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 330. Patching Array

LeetCode 330. Patching Array

作者头像
ShenduCC
发布2020-03-17 18:10:27
5100
发布2020-03-17 18:10:27
举报
文章被收录于专栏:算法修养

题目

题意:给你一个数组,问你还要加上多少个数字,可以让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

代码语言:javascript
复制
      要注意有超int的情况
代码语言:javascript
复制
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;
        
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-03-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档