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);
}
在这里面,假设现在可以便是的范围为[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);
}
相关文章推荐
- 蓝桥杯+兰顿蚂蚁
- 动态图片、图表
- 生成树的计数(基尔霍夫矩阵):BZOJ 1002 [FJOI2007]轮状病毒
- Mysql 表的增删改sql语句
- Docker 1.3 公布
- java第五次作业
- java第四次作业
- POJ 1007
- 哈工大LTP和中科院NLPIR中文分词比较
- AbsListView 浅析
- Java的语言基础
- 使用静态工厂方法而不是构造器
- NYOJ 762
- 新生3
- 不知道
- 第7周学习进度
- django 生成复杂的 PDF 文件(数据较多时)
- Android GoogleMap suggestion AutoComplete (二)具体实现
- Direct UI 思想阐述(好多相关文章)
- Linux的防火墙