1. 程式人生 > >跳躍遊戲

跳躍遊戲

system 更新 else 代碼 toe 輸出格式 最優 心算 pub

問題描述

給定一個非負整數數組,假定你的初始位置為數組第一個下標。
數組中的每個元素代表你在那個位置能夠跳躍的最大長度。
請確認你是否能夠跳躍到數組的最後一個下標。
例如:
A=[2,3,1,1,4] 能夠跳躍到最後一個下標,輸出true
A=[3,2,1,0,4] 不能跳躍到最後一個下標,輸出false

輸入格式

第一行輸入一個正整數 n (1 ≤ n ≤ 500),接下來的一行 n 個整數,輸入數組 A[n]。

輸出格式

如果能跳到最後一個下標,輸出true,否則輸出false

代碼

參考代碼一

package javaexam;

import java.util.Scanner;

public
class IsJumpToEnd { public static void main(String[] args) { Scanner input = new Scanner(System.in); int n = input.nextInt(); int farthest = 0; int[] A = new int[n]; for(int i = 0; i < n; ++i) { A[i] = input.nextInt(); if
(farthest < i) { System.out.print(false); break; } farthest = Math.max(farthest, A[i] + i); if(farthest >= n - 1) { System.out.print(true); break; } } } }

參考代碼二

import java.util.*;

public class Main {
    public static void main(String args[])
    {
        Scanner input = new Scanner(System.in);
        int n = input.nextInt();
        /*
        思路:貪心算法;
        從第一個開始,尋找一個可以跳最遠的點;
        例如:a[7]={3,1,2,4,1,0,0}
                   0  1 2  3  4 5  6
        1.從第一個位置0,可以跳到位置1、2、3;
        2.如果跳到位置1,那麽最遠可跳到(1+a[1]);
        3.如果跳到位置2,那麽最遠可跳到(2+a[2]);
        4.如果跳到位置3,那麽最遠可跳到(3+a[3]);
        5.故選擇跳到位置3,重復上述步驟;
        
        算法分析:
        1.如果選擇跳到位置3,就無法選擇跳到位置1和位置2,那麽會不會錯過最優解呢?不會!
        2.因為位置1、2能到達的位置,位置3都可達;
        3.故不會錯過最優解。
        */
        
        int[] a = new int[n];
        for(int i = 0; i < n; ++i)
        {
            a[i] = input.nextInt();
        }
        
        int i;
        int r; //控制搜索終止位置
        int l; //控制搜索開始位置
        for(i = 0; i < n && a[i] != 0;) //當a[i]=0時,該位置為可到達的最遠位置
        {
            r = i + a[i];
            l = i + 1;
            for(int j = i + 1; j < n && j <= i+a[i]; ++j)
            {
                if(j+a[j] >= r) //遍歷能到達的最遠位置
                {
                    r = j + a[j]; //更新左右邊界
                    l = j;
                }
            }
            i = l; //左邊界
        }
        
        if(i < n - 1)
        {
            System.out.println("false");
        }
        else
        {
            System.out.println("true");
        }
    }
}

樣例測試

樣例一:

5
2 3 1 1 4
true

樣例二:

5
3 2 1 0 4
false

跳躍遊戲