Skip to content

Commit 41d7d6c

Browse files
committed
feat: add solutions to lc problem: No.0055
No.0055.Jump Game
1 parent c070192 commit 41d7d6c

File tree

9 files changed

+83
-33
lines changed

9 files changed

+83
-33
lines changed

solution/0000-0099/0055.Jump Game/README.md

+28-13
Original file line numberDiff line numberDiff line change
@@ -45,13 +45,13 @@
4545

4646
**方法一:贪心**
4747

48-
我们用变量 `mx` 维护当前能够到达的最远下标,初始时 `mx = 0`
48+
我们用变量 $mx$ 维护当前能够到达的最远下标,初始时 $mx = 0$
4949

50-
我们从左到右遍历数组,对于遍历到的每个位置 $i$,如果 $i\gt mx$,说明当前位置无法到达,直接返回 `false`。否则,我们可以通过跳跃从位置 $i$ 到达的最远位置为 $i+nums[i]$,我们用 $i+nums[i]$ 更新 `mx` 的值,即 $mx=\max(mx,i+nums[i])$。
50+
我们从左到右遍历数组,对于遍历到的每个位置 $i$,如果 $mx \lt i$,说明当前位置无法到达,直接返回 `false`。否则,我们可以通过跳跃从位置 $i$ 到达的最远位置为 $i+nums[i]$,我们用 $i+nums[i]$ 更新 $mx$ 的值,即 $mx = \max(mx, i + nums[i])$。
5151

5252
遍历结束,直接返回 `true`
5353

54-
时间复杂度 $O(n)$,空间复杂度 $O(1)$。
54+
时间复杂度 $O(n)$,其中 $n$ 为数组的长度。空间复杂度 $O(1)$。
5555

5656
相似题目:
5757

@@ -69,10 +69,10 @@
6969
class Solution:
7070
def canJump(self, nums: List[int]) -> bool:
7171
mx = 0
72-
for i, num in enumerate(nums):
73-
if i > mx:
72+
for i, x in enumerate(nums):
73+
if mx < i:
7474
return False
75-
mx = max(mx, i + num)
75+
mx = max(mx, i + x)
7676
return True
7777
```
7878

@@ -85,7 +85,7 @@ class Solution {
8585
public boolean canJump(int[] nums) {
8686
int mx = 0;
8787
for (int i = 0; i < nums.length; ++i) {
88-
if (i > mx) {
88+
if (mx < i) {
8989
return false;
9090
}
9191
mx = Math.max(mx, i + nums[i]);
@@ -103,7 +103,7 @@ public:
103103
bool canJump(vector<int>& nums) {
104104
int mx = 0;
105105
for (int i = 0; i < nums.size(); ++i) {
106-
if (i > mx) {
106+
if (mx < i) {
107107
return false;
108108
}
109109
mx = max(mx, i + nums[i]);
@@ -118,11 +118,11 @@ public:
118118
```go
119119
func canJump(nums []int) bool {
120120
mx := 0
121-
for i, num := range nums {
122-
if i > mx {
121+
for i, x := range nums {
122+
if mx < i {
123123
return false
124124
}
125-
mx = max(mx, i+num)
125+
mx = max(mx, i+x)
126126
}
127127
return true
128128
}
@@ -135,6 +135,21 @@ func max(a, b int) int {
135135
}
136136
```
137137

138+
### **TypeScript**
139+
140+
```ts
141+
function canJump(nums: number[]): boolean {
142+
let mx: number = 0;
143+
for (let i = 0; i < nums.length; ++i) {
144+
if (mx < i) {
145+
return false;
146+
}
147+
mx = Math.max(mx, i + nums[i]);
148+
}
149+
return true;
150+
}
151+
```
152+
138153
### **JavaScript**
139154

140155
```js
@@ -145,7 +160,7 @@ func max(a, b int) int {
145160
var canJump = function (nums) {
146161
let mx = 0;
147162
for (let i = 0; i < nums.length; ++i) {
148-
if (i > mx) {
163+
if (mx < i) {
149164
return false;
150165
}
151166
mx = Math.max(mx, i + nums[i]);
@@ -161,7 +176,7 @@ public class Solution {
161176
public bool CanJump(int[] nums) {
162177
int mx = 0;
163178
for (int i = 0; i < nums.Length; ++i) {
164-
if (i > mx) {
179+
if (mx < i) {
165180
return false;
166181
}
167182
mx = Math.Max(mx, i + nums[i]);

solution/0000-0099/0055.Jump Game/README_EN.md

+35-10
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,16 @@
3535

3636
## Solutions
3737

38+
**Approach 1: Greedy**
39+
40+
We use a variable $mx$ to maintain the farthest index that can be reached, initially $mx = 0$.
41+
42+
We traverse the array from left to right, for each position $i$ we are currently traversing, if $mx \lt i$, it means that the current position cannot be reached, directly return `false`. Otherwise, the farthest position that can be reached from position $i$ by jumping is $i+nums[i]$, we use $i+nums[i]$ to update the value of $mx$, that is $mx = \max(mx, i + nums[i])$.
43+
44+
When the traversal ends, return `true` directly.
45+
46+
The time complexity is $O(n)$, where $n$ is the length of the array. The space complexity is $O(1)$.
47+
3848
<!-- tabs:start -->
3949

4050
### **Python3**
@@ -43,10 +53,10 @@
4353
class Solution:
4454
def canJump(self, nums: List[int]) -> bool:
4555
mx = 0
46-
for i, num in enumerate(nums):
47-
if i > mx:
56+
for i, x in enumerate(nums):
57+
if mx < i:
4858
return False
49-
mx = max(mx, i + num)
59+
mx = max(mx, i + x)
5060
return True
5161
```
5262

@@ -57,7 +67,7 @@ class Solution {
5767
public boolean canJump(int[] nums) {
5868
int mx = 0;
5969
for (int i = 0; i < nums.length; ++i) {
60-
if (i > mx) {
70+
if (mx < i) {
6171
return false;
6272
}
6373
mx = Math.max(mx, i + nums[i]);
@@ -75,7 +85,7 @@ public:
7585
bool canJump(vector<int>& nums) {
7686
int mx = 0;
7787
for (int i = 0; i < nums.size(); ++i) {
78-
if (i > mx) {
88+
if (mx < i) {
7989
return false;
8090
}
8191
mx = max(mx, i + nums[i]);
@@ -90,11 +100,11 @@ public:
90100
```go
91101
func canJump(nums []int) bool {
92102
mx := 0
93-
for i, num := range nums {
94-
if i > mx {
103+
for i, x := range nums {
104+
if mx < i {
95105
return false
96106
}
97-
mx = max(mx, i+num)
107+
mx = max(mx, i+x)
98108
}
99109
return true
100110
}
@@ -107,6 +117,21 @@ func max(a, b int) int {
107117
}
108118
```
109119

120+
### **TypeScript**
121+
122+
```ts
123+
function canJump(nums: number[]): boolean {
124+
let mx: number = 0;
125+
for (let i = 0; i < nums.length; ++i) {
126+
if (mx < i) {
127+
return false;
128+
}
129+
mx = Math.max(mx, i + nums[i]);
130+
}
131+
return true;
132+
}
133+
```
134+
110135
### **JavaScript**
111136

112137
```js
@@ -117,7 +142,7 @@ func max(a, b int) int {
117142
var canJump = function (nums) {
118143
let mx = 0;
119144
for (let i = 0; i < nums.length; ++i) {
120-
if (i > mx) {
145+
if (mx < i) {
121146
return false;
122147
}
123148
mx = Math.max(mx, i + nums[i]);
@@ -133,7 +158,7 @@ public class Solution {
133158
public bool CanJump(int[] nums) {
134159
int mx = 0;
135160
for (int i = 0; i < nums.Length; ++i) {
136-
if (i > mx) {
161+
if (mx < i) {
137162
return false;
138163
}
139164
mx = Math.Max(mx, i + nums[i]);

solution/0000-0099/0055.Jump Game/Solution.cpp

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ class Solution {
33
bool canJump(vector<int>& nums) {
44
int mx = 0;
55
for (int i = 0; i < nums.size(); ++i) {
6-
if (i > mx) {
6+
if (mx < i) {
77
return false;
88
}
99
mx = max(mx, i + nums[i]);

solution/0000-0099/0055.Jump Game/Solution.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ public class Solution {
22
public bool CanJump(int[] nums) {
33
int mx = 0;
44
for (int i = 0; i < nums.Length; ++i) {
5-
if (i > mx) {
5+
if (mx < i) {
66
return false;
77
}
88
mx = Math.Max(mx, i + nums[i]);

solution/0000-0099/0055.Jump Game/Solution.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
func canJump(nums []int) bool {
22
mx := 0
3-
for i, num := range nums {
4-
if i > mx {
3+
for i, x := range nums {
4+
if mx < i {
55
return false
66
}
7-
mx = max(mx, i+num)
7+
mx = max(mx, i+x)
88
}
99
return true
1010
}

solution/0000-0099/0055.Jump Game/Solution.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ class Solution {
22
public boolean canJump(int[] nums) {
33
int mx = 0;
44
for (int i = 0; i < nums.length; ++i) {
5-
if (i > mx) {
5+
if (mx < i) {
66
return false;
77
}
88
mx = Math.max(mx, i + nums[i]);

solution/0000-0099/0055.Jump Game/Solution.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
var canJump = function (nums) {
66
let mx = 0;
77
for (let i = 0; i < nums.length; ++i) {
8-
if (i > mx) {
8+
if (mx < i) {
99
return false;
1010
}
1111
mx = Math.max(mx, i + nums[i]);
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
class Solution:
22
def canJump(self, nums: List[int]) -> bool:
33
mx = 0
4-
for i, num in enumerate(nums):
5-
if i > mx:
4+
for i, x in enumerate(nums):
5+
if mx < i:
66
return False
7-
mx = max(mx, i + num)
7+
mx = max(mx, i + x)
88
return True
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
function canJump(nums: number[]): boolean {
2+
let mx: number = 0;
3+
for (let i = 0; i < nums.length; ++i) {
4+
if (mx < i) {
5+
return false;
6+
}
7+
mx = Math.max(mx, i + nums[i]);
8+
}
9+
return true;
10+
}

0 commit comments

Comments
 (0)