Java 题解 | #牛群跃迁#
牛群跃迁
https://www.nowcoder.com/practice/565683772800460496f2d10f2388698e
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型一维数组 * @return bool布尔型 */ public boolean can_jump (int[] nums) { // write code here // 牛群当前所能到达的最远位置 int farthest = 0; // 遍历每个障碍位置 for (int i = 0; i < nums.length; i++) { // 如果当前位置超过了当前最远能到达的位置,说明无法跨越该障碍 if (i > farthest) { return false; } // 更新最远能到达的位置 farthest = Math.max(farthest, i + nums[i]); // 如果最远能到达的位置已经超过了最后一个障碍,表示可以成功到达终点 if (farthest >= nums.length - 1) { return true; } } // 如果遍历结束后未能到达终点,则返回 false return false; } }
Java代码
该题考察的主要知识点包括:
- 数组操作
- 循环和条件判断
- 贪心算法:通过每次选择当前位置能够跳跃的最大长度来逐步更新最远能到达的位置,从而判断是否能够到达终点。
代码解释:
- 创建一个变量 farthest,表示当前牛群所能到达的最远位置,初始值为 0。
- 使用循环遍历每个障碍的位置。
- 在循环内部,首先判断当前位置是否已经超过了 farthest,如果是,则说明无法跨越当前障碍,返回 false。
- 更新 farthest 为当前位置和当前位置能够跳跃的最大长度之和的较大值,以确保最远能到达的位置的正确性。
- 判断如果最远能到达的位置已经超过了最后一个障碍的位置,说明可以成功到达终点,返回 true。
- 循环结束后,如果仍然未能到达终点,返回 false。