@@ -38,11 +38,11 @@ \subsubsection{代码1}
38
38
// 思路1,时间复杂度O(n),空间复杂度O(1)
39
39
class Solution {
40
40
public:
41
- bool canJump(int A[], int n ) {
41
+ bool canJump(const vector< int>& nums ) {
42
42
int reach = 1; // 最右能跳到哪里
43
- for (int i = 0; i < reach && reach < n ; ++i)
44
- reach = max(reach, i + 1 + A [i]);
45
- return reach >= n ;
43
+ for (int i = 0; i < reach && reach < nums.size() ; ++i)
44
+ reach = max(reach, i + 1 + nums [i]);
45
+ return reach >= nums.size() ;
46
46
}
47
47
};
48
48
\end {Code }
@@ -54,13 +54,13 @@ \subsubsection{代码2}
54
54
// 思路2,时间复杂度O(n),空间复杂度O(1)
55
55
class Solution {
56
56
public:
57
- bool canJump (int A[], int n ) {
58
- if (n == 0 ) return true;
57
+ bool canJump (const vector< int>& nums ) {
58
+ if (nums.empty() ) return true;
59
59
// 逆向下楼梯,最左能下降到第几层
60
- int left_most = n - 1;
60
+ int left_most = nums.size() - 1;
61
61
62
- for (int i = n - 2; i >= 0; --i)
63
- if (i + A [i] >= left_most)
62
+ for (int i = nums.size() - 2; i >= 0; --i)
63
+ if (i + nums [i] >= left_most)
64
64
left_most = i;
65
65
66
66
return left_most == 0;
@@ -75,14 +75,14 @@ \subsubsection{代码3}
75
75
// 思路三,动规,时间复杂度O(n),空间复杂度O(n)
76
76
class Solution {
77
77
public:
78
- bool canJump(int A[], int n ) {
79
- vector<int> f(n , 0);
78
+ bool canJump(const vector< int>& nums ) {
79
+ vector<int> f(nums.size() , 0);
80
80
f[0] = 0;
81
- for (int i = 1; i < n ; i++) {
82
- f[i] = max(f[i - 1], A [i - 1]) - 1;
81
+ for (int i = 1; i < nums.size() ; i++) {
82
+ f[i] = max(f[i - 1], nums [i - 1]) - 1;
83
83
if (f[i] < 0) return false;;
84
84
}
85
- return f[n - 1] >= 0;
85
+ return f[nums.size() - 1] >= 0;
86
86
}
87
87
};
88
88
\end {Code }
@@ -121,18 +121,18 @@ \subsubsection{代码1}
121
121
// 时间复杂度O(n),空间复杂度O(1)
122
122
class Solution {
123
123
public:
124
- int jump(int A[], int n ) {
124
+ int jump(const vector< int>& nums ) {
125
125
int step = 0; // 最小步数
126
126
int left = 0;
127
127
int right = 0; // [left, right]是当前能覆盖的区间
128
- if (n == 1) return 0;
128
+ if (nums.size() == 1) return 0;
129
129
130
130
while (left <= right) { // 尝试从每一层跳最远
131
131
++step;
132
132
const int old_right = right;
133
133
for (int i = left; i <= old_right; ++i) {
134
- int new_right = i + A [i];
135
- if (new_right >= n - 1) return step;
134
+ int new_right = i + nums [i];
135
+ if (new_right >= nums.size() - 1) return step;
136
136
137
137
if (new_right > right) right = new_right;
138
138
}
@@ -150,18 +150,18 @@ \subsubsection{代码2}
150
150
// 时间复杂度O(n),空间复杂度O(1)
151
151
class Solution {
152
152
public:
153
- int jump(int A[], int n ) {
153
+ int jump(const vector< int>& nums ) {
154
154
int result = 0;
155
155
// the maximum distance that has been reached
156
156
int last = 0;
157
157
// the maximum distance that can be reached by using "ret+1" steps
158
158
int cur = 0;
159
- for (int i = 0; i < n ; ++i) {
159
+ for (int i = 0; i < nums.size() ; ++i) {
160
160
if (i > last) {
161
161
last = cur;
162
162
++result;
163
163
}
164
- cur = max(cur, i + A [i]);
164
+ cur = max(cur, i + nums [i]);
165
165
}
166
166
167
167
return result;
0 commit comments