题解 | #大胃王牛牛# java
大胃王牛牛
https://www.nowcoder.com/practice/4e55777e218b4850928d054a8cddaf50
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param grass int整型一维数组 * @param cost int整型一维数组 * @return int整型 */ public int can_complete_circuit (int[] grass, int[] cost) { // write code here int sz = grass.length; int remain = 0; int res = -1; if (sz > 0 && sz == cost.length) { for (int i = 0; i < sz; i++) { remain += grass[i] - cost[i]; } if (remain >= 0) { remain = 0; res = 0; for (int i = 0; i < sz; i++) { remain += grass[i] - cost[i]; if (remain < 0) { remain = 0; res = i + 1; } } res++; } } return res; } }
编程语言是Java
这道题考察
- 数组的遍历与操作
- 条件判断与循环
以下是代码的解释:
- can_complete_circuit 方法接受两个整数数组 grass 和 cost 作为参数,表示每个牛棚的草料数量和从一个牛棚到下一个牛棚所需的花费。
- 初始化变量 sz 表示牛棚数量,remain 表示剩余草料和花费的差值,以及 res 表示结果,默认为 -1。
- 判断牛棚数量是否大于0,并且草料数组和花费数组的长度是否一致。
- 在循环中,遍历每个牛棚,累加剩余草料和花费的差值。
- 如果剩余草料和花费的差值大于等于0,则意味着可以走完一周,初始化 remain 为0,res 为0。
- 再次循环遍历每个牛棚,累加剩余草料和花费的差值。
- 如果剩余草料和花费的差值小于0,说明从当前牛棚出发无法走完一周,将 remain 重置为0,res 更新为下一个牛棚的下标(即 i+1)。
- 最终返回结果 res,表示从哪个牛棚出发能够沿顺序走完环形路线的一个周,或者返回-1表示无解。