当前位置: 首页 > 后端技术 > Java

LeetCode-055-JumpingGame

时间:2023-04-01 17:47:54 Java

JumpingGame题目描述:给定一个非负整数数组nums,你最初位于数组的第一个下标处。数组中的每个元素代表您可以在该位置跳跃的最大长度。判断是否能到达最后一个下标。例子见LeetCode官网。来源:LeetCode链接:https://leetcode-cn.com/probl...版权归LeetCode所有。商业转载请联系官方授权,非商业转载请注明出处。方案一:穷举法首先,如果nums的长度为1,直接返回true;如果nums第一个元素的值为0,则无法向后跳转,直接返回false;如果不是前两种情况时,首先声明一个可变长度作为数组的最大索引位,声明一个HashSet为jumped记录跳转位置,声明一个队列toJump记录当前位置,首先添加索引bit0tojumped和toJump,然后按照如下流程遍历队列toJump:从队列中取出一个cur加入jumped;如果cur对应的数组的值为0,则跳过处理下一个队列中的值;如果cur对应的数组的值大于等于lengt-cur,则可以直接从当前位置跳转到最后一个,然后直接返回true;否则,将cur之后的nums[cur]的索引位添加到toJump中,添加前需要判断是否在jumped和toJump之间已经存在,如果存在,避免重复处理,跳过,处理next中的值队列。最后,如果队列为空,还没有跳到数组的最后一个位置,则返回false。importjava.util.HashSet;importjava.util.LinkedList;importjava.util.Queue;importjava.util.Set;publicclassLeetCode_055{publicstaticbooleancanJump(int[]nums){if(nums.length==1){返回真;}if(nums[0]==0){返回false;}intlength=nums.length-1;//确定义走到过的位置Setjumped=newHashSet<>();跳跃.add(0);//确定当前位置QueuetoJump=newLinkedList<>();toJump.add(0);while(!toJump.isEmpty()){整数cur=toJump.poll();跳跃.add(cur);如果(nums[cur]==0){继续;}if(nums[cur]>=length-cur){returntrue;}else{for(inti=nums[cur];i>=1;i--){if(!jumped.contains(cur+i)&&!toJump.contains(cur+i)){toJump.add(cur+i);}}}}返回假;}publicstaticvoidmain(String[]args){int[]nums=newint[]{2,3,1,1,4};.out.println(canJump(nums));}}【每日寄语】好运从清晨开始,愿你笑着醒来,笑中有幸福