8.10 *Greedy* JumpGame I&II

- to do

12.1] Jump Game

    bool canJump(vector<int>& nums) {
        int rightMost = 0;
        for (int i=0; i<=rightMost && i<nums.size()-1; ++i) {
            rightMost = max(rightMost, i+nums[i]);
        }
        return rightMost >= nums.size()-1;
    }

stepping from top towards bottom

    bool canJump(vector<int>& nums) {
        int leftMost = nums.size()-1;
        for (int i=nums.size()-2; i>=0; --i) {
            if (i+nums[i] >=leftMost)
                leftMost = i;
        }
        return leftMost==0;
    }

naive

    int jump(vector<int>& nums) {
      if (nums.size()<2) return 0;
      vector<int> minSteps(nums.size(), INT_MAX);
      int i=0; //inspect point
      minSteps[0] = 0;
      for (int j=i+1; j<=i+nums[0] && j<nums.size(); ++j) minSteps[j]=1;
      
      for (; i<nums.size()-1; ++i) {
          if (minSteps[i-1]==INT_MAX) continue;
          for (int j=i+1; j<=i+nums[i] && j<nums.size(); ++j) {
              minSteps[j] = min(minSteps[j], minSteps[i]+1);
          }
      }
      return minSteps[nums.size()-1];
    }

......................................

45. Jump Game II

    int jump(vector<int>& nums) {
        int step=0, start=0, end=0; 
        int n=nums.size();
        while (end<n-1) {
            ++step;
            int maxEnd = end+1;
            for (int i=start; i<=end; ++i) {
                if (i+nums[i] >= n-1) return step;
                maxEnd = max(maxEnd, i+nums[i]);
            }
            start = end+1;
            end = maxEnd;
        }
        return step;
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • **2014真题Directions:Read the following text. Choose the be...
    又是夜半惊坐起阅读 13,394评论 0 23
  • 手机上的系统提示音响了,对话框说“我们已经是好友啦,一起来聊天吧!” 高考结束后的第一件事,就是加他为好友。许...
    所以呢123阅读 2,656评论 0 1
  • 网络就传一句话,始于颜值,陷于才华,忠于人品。外表是一个人最开始光注的部分,相处久了,人品,生活里细节才是最重要的...
    华花HY阅读 1,150评论 0 4
  • 最近喜欢上了骑单车。近期北京有好多的摩拜单车供大家骑行。 骑自行车在路上有种特殊的感觉。觉得自己是活的,有呼吸的存...
    靖溪阅读 3,056评论 0 0