好久没刷了,自己刚看到题,可能知道是贪心,但还是无从下笔,但还是想出来了,感谢计算所卜老师的算法课 让我知道 了 遇题不决 “从最简单的例子出发” 的重要性,比如此题如果rungs 大小为1、2、。。
先写出了第一个超时版本
class Solution {
public:
// judge rungs, 能否到达lay;
int addRungs(vector<int>& rungs, int dist) {
int n = rungs.size();
int start =0;
int res =0;
// 从简单的出发,考虑能不能 到达第一个楼梯
// while(strt+ dist<rungs[0]){
// start +=dist;
// res+=1;
// }
// int i=0;
for(int i=0;i<n;i++){
while(start +dist<rungs[i]) {
start += dist;
res += 1;
}
start = rungs[i];
}
return res;
}
};
思考一下出问题在循环里别
class Solution {
public:
// judge rungs, 能否到达lay;
int addRungs(vector<int>& rungs, int dist) {
int n = rungs.size();
int start =0;
int res =0;
// #j while(strt+ dist<rungs[0]){
// start +=dist;
// res+=1;
// }
// int i=0;
for(int i=0;i<n;i++){
// while(start +dist<rungs[i]) {
// start += dist;
// res += 1;
// }
if(start + dist<rungs[i]){
res += (rungs[i] -start-1)/ dist;
}
start = rungs[i];
if (i == n) break;
}
// cout<<"nihao;";
return res;
}
};