zoukankan      html  css  js  c++  java
  • 跳跃游戏 12 · Jump Game 12

    跳跃游戏 1

    [抄题]:

    [思维问题]:

    [一句话思路]:

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. 由于要用iteration, 不能return, 每次都要对can数组进行操作
    2.  循环函数中不用return false, 因为最终能不能是can数组决定的

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    [总结]:

    [复杂度]:Time complexity: O() Space complexity: O()

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

     [代码风格] :

    跳跃游戏 2

    [抄题]:

    给出一个非负整数数组,你最初定位在数组的第一个位置。

    数组中的每个元素代表你在那个位置可以跳跃的最大长度。   

    你的目标是使用最少的跳跃次数到达数组的最后一个位置。

    [思维问题]:

    以为要比大小:确实是要比大小

    [一句话思路]:

    用steps[i] = steps[j] + 1来记录步数

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    [一刷]:

    1. steps[j]是从0开始往i靠近的 用j + A[j] >= i 表示角标能赶上
    2. steps[i]中只要有一个能赶上就足以break

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    不理解原理

    [总结]:

    通过角标能不能赶上,最终完成对steps[i]的迭代

    [复杂度]:Time complexity: O(n^2) Space complexity: O(n^2)

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    DP greedy一般不好随意出题,Google出题比较多。

    [其他解法]:

    greedy

    [Follow Up]:

    [LC给出的题目变变变]:

    757. Set Intersection Size At Least Two 至少有两个交集:greedy

     [代码风格] :

    public class Solution {
        public int jump(int[] A) {
            // state
            int[] steps = new int[A.length];
    
            // initialize
            steps[0] = 0;
            for (int i = 1; i < A.length; i++) {
                steps[i] = Integer.MAX_VALUE;
            }
    
            // function
            for (int i = 1; i < A.length; i++) {
                for (int j = 0; j < i; j++) {
                    if (steps[j] != Integer.MAX_VALUE && j + A[j] >= i) {
                        steps[i] = Math.min(steps[i], steps[j] + 1);
                    }
                }
            }
            
            // answer
            return steps[A.length - 1];
        }
    }
    View Code
  • 相关阅读:
    sleep和wait区别
    java学习路线图
    screen实现关闭ssh之后继续运行代码
    linux截取字符串的多种方法
    如何用Maven创建web项目(具体步骤)
    Failed to read candidate component class包冲突解决方法
    hadoop参数配置
    How to solve java.net.SocketTimeoutException:60000millis problem in HDFS
    win8style布局
    signalR的一些细节
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8432956.html
Copyright © 2011-2022 走看看