diff --git a/solution/0000-0099/0045.Jump Game II/README.md b/solution/0000-0099/0045.Jump Game II/README.md index 4e2af261f818f..df5afce25a020 100644 --- a/solution/0000-0099/0045.Jump Game II/README.md +++ b/solution/0000-0099/0045.Jump Game II/README.md @@ -169,18 +169,17 @@ function jump(nums: number[]): number { ```rust impl Solution { pub fn jump(nums: Vec) -> i32 { - let n = nums.len(); - let mut dp = vec![i32::MAX; n]; - dp[0] = 0; - for i in 0..n - 1 { - for j in 1..=nums[i] as usize { - if i + j >= n { - break; - } - dp[i + j] = dp[i + j].min(dp[i] + 1); + let mut ans = 0; + let mut mx = 0; + let mut last = 0; + for i in 0..(nums.len() - 1) { + mx = mx.max(i as i32 + nums[i]); + if last == i as i32 { + ans += 1; + last = mx; } } - dp[n - 1] + ans } } ``` @@ -206,19 +205,18 @@ public class Solution { #### C ```c -#define min(a, b) a < b ? a : b int jump(int* nums, int numsSize) { - int dp[numsSize]; - for (int i = 0; i < numsSize; i++) { - dp[i] = numsSize; - } - dp[0] = 0; - for (int i = 0; i < numsSize - 1; i++) { - for (int j = i + 1; j < (min(i + nums[i] + 1, numsSize)); j++) { - dp[j] = min(dp[j], dp[i] + 1); + int ans = 0; + int mx = 0; + int last = 0; + for (int i = 0; i < numsSize - 1; ++i) { + mx = (mx > i + nums[i]) ? mx : (i + nums[i]); + if (last == i) { + ++ans; + last = mx; } } - return dp[numsSize - 1]; + return ans; } ``` @@ -227,23 +225,23 @@ int jump(int* nums, int numsSize) { ```php class Solution { /** - * @param integer[] $nums - * @return integer + * @param Integer[] $nums + * @return Integer */ - function jump($nums) { - $maxReach = 0; - $steps = 0; - $lastJump = 0; - for ($i = 0; $i <= count($nums) - 2; $i++) { - $maxReach = max($maxReach, $i + $nums[$i]); - if ($i == $lastJump) { - $lastJump = $maxReach; - $steps++; + $ans = 0; + $mx = 0; + $last = 0; + + for ($i = 0; $i < count($nums) - 1; $i++) { + $mx = max($mx, $i + $nums[$i]); + if ($last == $i) { + $ans++; + $last = $mx; } } - return $steps; + return $ans; } } ``` diff --git a/solution/0000-0099/0045.Jump Game II/README_EN.md b/solution/0000-0099/0045.Jump Game II/README_EN.md index 4e1a30891520e..26a6b6242448f 100644 --- a/solution/0000-0099/0045.Jump Game II/README_EN.md +++ b/solution/0000-0099/0045.Jump Game II/README_EN.md @@ -166,18 +166,17 @@ function jump(nums: number[]): number { ```rust impl Solution { pub fn jump(nums: Vec) -> i32 { - let n = nums.len(); - let mut dp = vec![i32::MAX; n]; - dp[0] = 0; - for i in 0..n - 1 { - for j in 1..=nums[i] as usize { - if i + j >= n { - break; - } - dp[i + j] = dp[i + j].min(dp[i] + 1); + let mut ans = 0; + let mut mx = 0; + let mut last = 0; + for i in 0..(nums.len() - 1) { + mx = mx.max(i as i32 + nums[i]); + if last == i as i32 { + ans += 1; + last = mx; } } - dp[n - 1] + ans } } ``` @@ -203,19 +202,18 @@ public class Solution { #### C ```c -#define min(a, b) a < b ? a : b int jump(int* nums, int numsSize) { - int dp[numsSize]; - for (int i = 0; i < numsSize; i++) { - dp[i] = numsSize; - } - dp[0] = 0; - for (int i = 0; i < numsSize - 1; i++) { - for (int j = i + 1; j < (min(i + nums[i] + 1, numsSize)); j++) { - dp[j] = min(dp[j], dp[i] + 1); + int ans = 0; + int mx = 0; + int last = 0; + for (int i = 0; i < numsSize - 1; ++i) { + mx = (mx > i + nums[i]) ? mx : (i + nums[i]); + if (last == i) { + ++ans; + last = mx; } } - return dp[numsSize - 1]; + return ans; } ``` @@ -224,23 +222,23 @@ int jump(int* nums, int numsSize) { ```php class Solution { /** - * @param integer[] $nums - * @return integer + * @param Integer[] $nums + * @return Integer */ - function jump($nums) { - $maxReach = 0; - $steps = 0; - $lastJump = 0; - for ($i = 0; $i <= count($nums) - 2; $i++) { - $maxReach = max($maxReach, $i + $nums[$i]); - if ($i == $lastJump) { - $lastJump = $maxReach; - $steps++; + $ans = 0; + $mx = 0; + $last = 0; + + for ($i = 0; $i < count($nums) - 1; $i++) { + $mx = max($mx, $i + $nums[$i]); + if ($last == $i) { + $ans++; + $last = $mx; } } - return $steps; + return $ans; } } ``` diff --git a/solution/0000-0099/0045.Jump Game II/Solution.c b/solution/0000-0099/0045.Jump Game II/Solution.c index 241e3ddcbf6dd..43ee05a49817d 100644 --- a/solution/0000-0099/0045.Jump Game II/Solution.c +++ b/solution/0000-0099/0045.Jump Game II/Solution.c @@ -1,14 +1,13 @@ -#define min(a, b) a < b ? a : b int jump(int* nums, int numsSize) { - int dp[numsSize]; - for (int i = 0; i < numsSize; i++) { - dp[i] = numsSize; - } - dp[0] = 0; - for (int i = 0; i < numsSize - 1; i++) { - for (int j = i + 1; j < (min(i + nums[i] + 1, numsSize)); j++) { - dp[j] = min(dp[j], dp[i] + 1); + int ans = 0; + int mx = 0; + int last = 0; + for (int i = 0; i < numsSize - 1; ++i) { + mx = (mx > i + nums[i]) ? mx : (i + nums[i]); + if (last == i) { + ++ans; + last = mx; } } - return dp[numsSize - 1]; -} \ No newline at end of file + return ans; +} diff --git a/solution/0000-0099/0045.Jump Game II/Solution.php b/solution/0000-0099/0045.Jump Game II/Solution.php index 45c5fb59b475e..3d2184dbcaced 100644 --- a/solution/0000-0099/0045.Jump Game II/Solution.php +++ b/solution/0000-0099/0045.Jump Game II/Solution.php @@ -1,22 +1,21 @@ -) -> i32 { - let n = nums.len(); - let mut dp = vec![i32::MAX; n]; - dp[0] = 0; - for i in 0..n - 1 { - for j in 1..=nums[i] as usize { - if i + j >= n { - break; - } - dp[i + j] = dp[i + j].min(dp[i] + 1); + let mut ans = 0; + let mut mx = 0; + let mut last = 0; + for i in 0..(nums.len() - 1) { + mx = mx.max(i as i32 + nums[i]); + if last == i as i32 { + ans += 1; + last = mx; } } - dp[n - 1] + ans } }