您的位置:首页 > 其它

LeetCode Patching Array

2016-04-17 18:02 375 查看
自己没有思路,看了看其他人的,看懂了,想了很久

在这里面,假设现在可以便是的范围为[1,sum),sum为所表示的最大数+1;如果下一个数nums[i]<=sum;则这个nums[i]可以被表示,则所表示的范围变为[1,sum+nums[i]),如果nums[i]>sum,则nums[i]不能被表示,则原数组加上sum,表示范围是[1,2*sum)。

注意sum可能会溢出,所以要变为long型的。

#include<iostream>
#include<vector>
using namespace std;

class Solution{
public:
int minPatches(vector<int>& nums,int n){

long sum=1,i=0,count=0;
while(sum<=n){
if(i<nums.size()&&nums[i]<=sum){
sum+=nums[i++];
}
else{
count++;
sum+=sum;
}
}
return count;
}

};

int main(){
int n;
int m;
vector<int> nums;
cout<<"n:";
cin>>n;
while(cin>>m){
nums.push_back(m);
}
Solution min;
cout<<min.minPatches(nums,n);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: