当前位置: 首页 > news >正文

数组移动跳跃-Java

数组移动跳跃-Java

1、题目描述

输出:按此规则是否可以成功跳出数组,成功输出true,否则输出false;

测试用例:

[1]

输出:true

[2,1,-3]

输出:true

[1,1,1,2,-1,1,-3]

输出:false

 

2、代码实现


import java.util.Scanner;

public class Main {

	/**
	 * @param args
	 *            【 数组移动跳跃 】 从下标为0开始遍历,每次移动当前值的位数,负数向前移动,正数向后移动;
	 *            当数组越界则跳出返回true,否则返回false; 测试用例: [1,2,3,4,5] 返回true [1,-3]
	 *            返回true [1] 返回true [1,1,1,2,-1,1,-3] 返回false
	 */
	public static void main(String[] args) {

		Scanner in = new Scanner(System.in);
		String s = in.nextLine().trim();
		String strs[] = s.substring(1, s.length() - 1).split(",");
		int nums[] = new int[strs.length];
		for (int i = 0; i < strs.length; i++) {
			nums[i] = Integer.parseInt(strs[i]);
		}

		solution(nums);

	}

	private static void solution(int[] nums) {
		// TODO Auto-generated method stub
		if (nums.length <= 0 || nums == null)
			return;
		// 标记变量,标记每个位置的数是否已经遍历过
		// 若出现重复遍历过同一个位置,则说明出现了循环,则永远也不会跳出
		boolean[] flags = new boolean[nums.length];
		int i = 0;
		flags[i] = true;

		while (i < nums.length && i >= 0) {
			int temp = nums[i];
			i = i + temp;

			if (i >= nums.length || i < 0) {
				System.out.println(true);// 只要数组越界即可跳出循环
				return;
			}
			if (!flags[i]) {
				flags[i] = true;
			} else if (flags[i]) {
				System.out.println(false);
				return;
			}
		}
	}

}

思路:

标记已访问过得数据;

按照规则依次循环遍历;

判断下标是否越界,越界则跳出循环,跳出数组,输出true;

重复访问则不会跳出数组,跳出循环,输出false;

 

相关文章:

  • Java-查找数组众数:众数出现次数超过n/2次,n为数组长度
  • java 错误:The type java.util.Comparator cannot be resolved. It is indirectly referenced from required
  • 错误:Could not find main class : test.test.Program will exit
  • VTK-java版本-连续渐变的颜色映射表设置
  • Windows-64位环境下载并安装Python3.5.4
  • Windows -64 安装python3.5.2
  • 下载并安装Anaconda
  • Windows下安装TensorFlow教程(cpu版本)
  • VS2015下载地址-镜像文件
  • VS2015安装教程
  • 查看Windows下TensorFlow对python版本的要求
  • 查看本机显卡配置是否支持安装gpu版本的tensorflow
  • cuda安装教程+cudnn安装教程
  • Win10下安装tensorflow教程(cpu版本和GPU版本)
  • Windows10 -64 安装tensorflow遇到的:cuda安装后找不到安装文件目录
  • [译]Python中的类属性与实例属性的区别
  • 【干货分享】SpringCloud微服务架构分布式组件如何共享session对象
  • Fastjson的基本使用方法大全
  • HTTP--网络协议分层,http历史(二)
  • Java多线程(4):使用线程池执行定时任务
  • Node 版本管理
  • react 代码优化(一) ——事件处理
  • -- 查询加强-- 使用如何where子句进行筛选,% _ like的使用
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 前端自动化解决方案
  • 我的业余项目总结
  • 在Unity中实现一个简单的消息管理器
  • ​Z时代时尚SUV新宠:起亚赛图斯值不值得年轻人买?
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • #、%和$符号在OGNL表达式中经常出现
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • $.proxy和$.extend
  • (c语言版)滑动窗口 给定一个字符串,只包含字母和数字,按要求找出字符串中的最长(连续)子串的长度
  • (SpringBoot)第七章:SpringBoot日志文件
  • (层次遍历)104. 二叉树的最大深度
  • (二)构建dubbo分布式平台-平台功能导图
  • (九)信息融合方式简介
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (转) 深度模型优化性能 调参
  • (轉)JSON.stringify 语法实例讲解
  • .dat文件写入byte类型数组_用Python从Abaqus导出txt、dat数据
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .NET简谈互操作(五:基础知识之Dynamic平台调用)
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [ABP实战开源项目]---ABP实时服务-通知系统.发布模式
  • [AIGC] Kong:一个强大的 API 网关和服务平台
  • [Asp.net MVC]Asp.net MVC5系列——Razor语法
  • [C]编译和预处理详解
  • [C++] sqlite3_get_table 的使用
  • [C++]Leetcode17电话号码的字母组合
  • [C++]命名空间等——喵喵要吃C嘎嘎
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子
  • [CSS] 点击事件触发的动画
  • [CTF]2022美团CTF WEB WP