zoukankan      html  css  js  c++  java
  • LeetCode 330. Patching Array

    题目

    题意:给你一个数组,问你还要加上多少个数字,可以让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;
            
        }
    };
    
  • 相关阅读:
    表操作
    mysql表的完整性约束
    mysql支持的数据类型
    数据库存储引擎
    Navicat工具、pymysql模块、数据备份
    数据库一
    IO模型
    协成
    线程
    进程
  • 原文地址:https://www.cnblogs.com/dacc123/p/12493921.html
Copyright © 2011-2022 走看看