zoukankan      html  css  js  c++  java
  • [LeetCode] Jump Game II

    This problem has a nice BFS structure. Let's illustrate it using the example nums = [2, 3, 1, 1, 4] in the problem statement. We are initially at position 0. Then we can move at most nums[0]steps from it. So, after one move, we may reach nums[1] = 3 or nums[2] = 1. So these nodes are reachable in 1 move. From these nodes, we can further move to nums[3] = 1 and nums[4] = 4. Now you can see that the target nums[4] = 4 is reachable in 2 moves.

    Putting these into codes, we keep two pointers start and end that record the current range of the starting nodes. Each time after we make a move, update start to be end + 1 and end to be the farthest index that can be reached in 1 move from the current [start, end].

    To get an accepted solution, it is important to handle all the edge cases. And the following codes handle all of them in a unified way without using the unclean if statements :-)


    C++

     1 class Solution {
     2 public:
     3     int jump(vector<int>& nums) {
     4         int n = nums.size(), step = 0, start = 0, end = 0;
     5         while (end < n - 1) {
     6             step++; 
     7             int maxend = end + 1;
     8             for (int i = start; i <= end; i++) {
     9                 if (i + nums[i] >= n - 1) return step;
    10                 maxend = max(maxend, i + nums[i]);
    11             }
    12             start = end + 1;
    13             end = maxend;
    14         }
    15         return step;
    16     }
    17 };

    Python

     1 class Solution:
     2     # @param {integer[]} nums
     3     # @return {integer}
     4     def jump(self, nums):
     5         n, start, end, step = len(nums), 0, 0, 0
     6         while end < n - 1:
     7             step += 1
     8             maxend = end + 1
     9             for i in range(start, end + 1):
    10                 if i + nums[i] >= n - 1:
    11                     return step
    12                 maxend = max(maxend, i + nums[i])
    13             start, end = end + 1, maxend
    14         return step
  • 相关阅读:
    AtCoder Grand Contest 031
    CF1010D Mars rover
    51Nod 1317 相似字符串对
    upd
    查漏补缺——字符串www.qq.com所有非空子串
    c语言查漏补缺——Win32环境下动态链接库(DLL)编程原理
    编程——二维矩阵中1所构成的块个数(孤岛问题)
    使用Windows自带远程桌面应用连接CentOS8远程桌面
    ZeroTier + NoMachine
    WinPE装入硬盘做应急系统教程
  • 原文地址:https://www.cnblogs.com/jcliBlogger/p/4649566.html
Copyright © 2011-2022 走看看