leetcode Jump Game I II 待续 贪心看不懂啊!!!!
下面是这两个题的解法:
参考博客:http://blog.****.net/loverooney/article/details/38455475
自己写的第一题(TLE):
1 #include<iostream> 2 #include<vector> 3 4 using namespace std; 5 6 bool canJump(vector<int>& nums) 7 { 8 int L = nums.size(); 9 bool *flag = new bool[L]; 10 for (int i = L - 2; i >= 0; i--) 11 { 12 int right = i + nums[i]; 13 if (right >= L - 1) 14 flag[i] = true; 15 else 16 { 17 flag[i] = false; 18 for (int j = i + 1;j<L&& j < i + nums[i]; j++) 19 { 20 if (flag[j] == true) 21 { 22 flag[i] = true; 23 break; 24 } 25 } 26 } 27 } 28 return flag[0]; 29 } 30 31 int main() 32 { 33 vector<int> a = { 3, 2, 1, 0, 4 }; 34 cout << canJump(a) << endl; 35 }
贪心用step维护当前可到达的最远位置,每次的i必须在这个最远位置以内,假如不在就表明不能前进了return false。
代码:
1 #include<iostream> 2 #include<vector> 3 4 using namespace std; 5 6 bool canJump(vector<int>& nums) 7 { 8 int L = nums.size(); 9 int step = 0; 10 for (int i = 0; i <= step; i++) 11 { 12 if (nums[i] + i > step) 13 step = nums[i] + i; 14 if (step >= L - 1) 15 return true; 16 } 17 return false; 18 } 19 20 int main() 21 { 22 int a[] = { 3, 2, 1, 0, 4 }; 23 cout << canJump(vector<int>(a, a+5)) << endl; 24 }