给定一个非负整数数组nums,假定最开始处于下标为0的位置,数组里面的每个元素代表下一跳能够跳跃的最大长度。如果能够跳到数组最后一个位置,则输出true,否则输出false。
数据范围:
第一行输入一个正整数 n ,表示数组 nums 的长度第二行输入 n 个整数表示数组的每个元素
输出 true 或者 false
7 2 1 3 3 0 0 100
true
首先位于nums[0]=2,然后可以跳2步,到nums[2]=3的位置,再跳到nums[3]=3的位置,再直接跳到nums[6]=100,可以跳到最后,输出true
7 2 1 3 2 0 0 100
false
无论怎么样,都跳不到nums[6]=100的位置
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = in.nextInt();
}
int maxLoc = nums[0];
// 遍历同时判断该位置是否可到达
for (int i = 1; i < n && i <= maxLoc; i++) {
// 每个位置计算自己能到达的最远位置
maxLoc = Math.max(maxLoc, nums[i] + i);
}
// 能到达的最远位置与数组最后一个下标比较
System.out.println(maxLoc >= n - 1);
}
}
#include <iostream>
using namespace std;
int main() {
int n;
cin>>n;
int right = 0, flag=0;
for(int i=0; i<n; i++){
if(i>right) break;
if(right>n-2){
flag = 1;
break;
}
int x;
cin>>x;
right = max(right, i+x);
}
cout<< (flag==1 ? "true" : "false");
return 0;
} #include <iostream>
#include <vector>
using namespace std;
bool dp26()
{
// freopen("1.txt", "r", stdin);
int n, tmp, a0, a1;
cin >> n;
if (n == 1) {
cout << "true";
return true;
}
cin >> tmp;
a0 = tmp;
for (int i = 1; i < n; i++) {
cin >> tmp;
if (a0 < i) {
cout << "false";
return false;
} else if (a0 >= n - 1){
cout << "true";
return true;
}else {
a1 = max(i + tmp, a0);
a0 = a1;
}
}
return false;
}
int main()
{
dp26();
return 0;
} Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] nums = new int[n];
int[] dp = new int[n];
dp[0] = in.nextInt();
for (int i = 1; i < n; i++) {
int num = in.nextInt();
if (dp[i - 1] < i) {
dp[n - 1] = 0; //达不到 , 直接结束.
break;
}
dp[i] = Math.max(dp[i - 1], i + num);
}
System.out.println(dp[n - 1] >= n - 1); import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
int n=in.nextInt();
int[] arr=new int[n];
for(int i=0;i<n;i++) arr[i]=in.nextInt();
int res=0;
for(int i=0;i<n;i++){
if(i<=res){
res=Math.max(res,i+arr[i]);
if(res>=n-1){
System.out.println(true); System.exit(0);
}
}
}
System.out.println(false);
}
} n = int(input())
nums = [int(x) for x in input().split()]
if n ==1:
print('true')
else:
dp = [False]*n
target = n-1
for i in range(n-2,-1,-1):
if target-i <= nums[i]:
target = i
dp[i] = True
continue
print(str(dp[0]).lower()) #include<bits/stdc++.h>
using namespace std;
string JumpGame(int n,vector<int>&nums){
int cover =0;
for(int i=0;i<=cover;i++){
cover =max(i+nums[i],cover);
if(cover>=n-1)return "true";
}
return "false";
}
int main(){
int n;
cin>>n;
vector<int> nums(n);
for(int i=0;i<n;i++){
cin>>nums[i];
}
cout<<JumpGame(n,nums);
return 0;
} #include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin>>n;
vector<int> a;
int b;
for(int i=0;i<n;i++)
{
cin>>b;
a.push_back(b);
}
if(a[0]==0 && a.size()!=1)
{
cout<<"false"<<endl;
return 0;
}
//每步判断,跳跃距离递减
vector<int> dp(n+1,0);
dp[1]=1;
int temp=0;
for(int i=2;i<=n+1;i++)
{
temp=max(temp,a[i-2]);
if(dp[i-1]==1)
{
dp[i]=temp>=1? 1:0;
temp=temp-1;
}
else
{
cout<<"false"<<endl;
return 0;
}
}
cout<<"true"<<endl;
return 0;
} #include<bits/stdc++.h>
using namespace std;
string canJump(vector<int>&nums,int n){
int farthest=0;
for(int i=0;i<n;i++){
if(i<=farthest){
farthest=max(farthest,i+nums[i]);
if(farthest>=n-1){
return "true";
}
}
}
return "false";
}
int main(){
int n;cin>>n;
vector<int>nums(n);
for(int i=0;i<n;i++) cin>>nums[i];
cout<<canJump(nums,n);
} import java.util.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNextInt()) { // 注意 while 处理多个 case
int n = in.nextInt();
int[] arr = new int[n];
for (int i = 0; i< n;i++) {
arr[i] = in.nextInt();
}
boolean b = dfs(arr);
System.out.println(b);
}
}
// dp 记录能到达的最大的index
// 时间复杂度为n
public static boolean dp2(int[] arr) {
int n = arr.length;
int dp = arr[0];
for (int i = 1; i < n && i <= dp ; i++) {
dp = Math.max(dp, arr[i] + i);
}
return dp >= n -1;
}
// 时间和arr元素的大小相关,当arr元素较小时,时间复杂度为O(n) = n
public static boolean dp1(int[] arr) {
int n = arr.length;
boolean[] dp = new boolean[arr.length];
dp[0] = true;
for (int i = 0; i<n; i++) {
if (dp[i]) {
for (int j= i+1; j <n && j <= i + arr[i]; j++) {
dp[j] = true;
if (j == arr.length -1) return true;
}
} else {
break;
}
}
return dp[arr.length -1];
}
// timeout
// O(n) = n^2
public static boolean dp3(int[] arr) {
boolean[] dp = new boolean[arr.length];
dp[0] = true;
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < i; j++) {
dp[i] = dp[j] && (i-j<=arr[j]);
if (dp[i]) break;
}
}
return dp[arr.length-1];
}
public static boolean dfs(int[] arr) {
return _dfs(arr, 0);
}
public static boolean _dfs(int[] arr, int idx) {
if (idx == arr.length - 1) return true;
int step = arr[idx];
for (int i=idx+1; i<=idx+step&&i<arr.length;i++) {
if (_dfs(arr, i)) return true;
}
return false;
}
// out of memory
public static boolean bfs(int[] arr) {
int len = arr.length;
LinkedList<Integer> list = new LinkedList<>();
list.add(0);
boolean found = false;
while (!list.isEmpty()) {
int idx = list.removeFirst();
if (idx == len - 1) return true;
int step = arr[idx];
for (int i = idx+1; i <= idx + step; i++) {
list.add(i);
}
}
return false;
}
}