您的位置:首页 > 其它

45. Jump Game II

2017-09-04 16:02 302 查看

时间复杂度过高,o(n2)超时了:

class Solution {
public:
int jump(vector<int>& nums) {
int length = nums.size();
if(length <= 0)
return 0;
vector<int> result(length);
result[0] = 0;
bool flag[length];
flag[0] = true;
for(int i = 1;i < length;i++)
flag[i] = false;
for(int i = 1;i < length;i++){
int min_num = 0x7fffffff;
for(int j = i-1;j >= 0;j--){
if(flag[j] == false)
continue;
if(flag[j] == true && nums[j] >= i-j){
if(result[j]+1 < min_num){
min_num = result[j] + 1;
flag[i] = true;
}
}
}
result[i] = min_num;
}
return result[length-1];
}
};

 把上面代码简化,依旧是超时

class Solution {
public:
int jump(vector<int>& nums) {
int length = nums.size();
if(length <= 0)
return 0;
vector<int> result(length);
result[0] = 0;
for(int i = 1;i < length;i++)
result[i] = -1;
for(int i = 1;i < length;i++){
int min_num = 0x7FFFFFFF;
for(int j = i-1;j >= 0;j--){
if(result[j] != -1 && nums[j] >= i-j){
result[i] = result[j] + 1;
if(result[i] < min_num)
min_num = result[i];
}
}
if(min_num != 0x7FFFFFFF)
result[i] = min_num;
else
result[i] = -1;
}
return result[length-1];
}
};

 用贪心算法做,时间复杂度只有0(n)

class Solution {
public:
int jump(vector<int>& nums) {
int n = nums.size();
if(n <= 0)
return 0;
int lastReach = 0;
int reach = 0;
int step = 0;
for(int i = 0; i < n && i <= reach; i++)
{
if(i > lastReach)
{
step++;
lastReach = reach;
}
reach = max(nums[i]+i, reach);
}
if(reach < n-1)
return 0;
else
return step;
}
};

 推导过程:

两个讲解博客:

http://blog.csdn.net/cinderella_niu/article/details/42804559

http://www.cnblogs.com/boring09/p/4231771.html

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