题解 | #牧场奶牛集合区域# java
牧场奶牛集合区域
https://www.nowcoder.com/practice/89218acf98234315af1cb3a223935318
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param groups int整型一维数组 * @param n int整型 * @return int整型二维数组 */ public int[][] findGatheringAreas (int[] groups, int n) { // write code here List<List<Integer>> res = new ArrayList<>(); int last = groups[0]; for (int i = 1; i < n; i++) { if (groups[i] - groups[i - 1] == 1) continue; List<Integer> area = new ArrayList<>(); area.add(last); area.add(groups[i - 1]); res.add(area); last = groups[i]; } List<Integer> area = new ArrayList<>(); area.add(last); area.add(groups[n - 1]); res.add(area); int[][] result = new int[res.size()][2]; for (int i = 0; i < res.size(); i++) { for (int j = 0; j < 2; j++) { result[i][j] = res.get(i).get(j); } } return result; } }
该代码使用的编程语言是Java
该题考察的知识点是数组遍历和条件判断。
代码的文字解释如下:
- 首先,给定一个整数型的数组
groups
和一个整数n
。 - 函数
findGatheringAreas
的作用是找到聚集区域的边界。 - 首先,创建一个二维整数型的向量
res
,用于存储聚集区域的边界。 - 初始化变量
last
为数组groups
的第一个元素。 - 从数组的第二个元素开始遍历,对于每个元素
groups[i]
:如果当前元素减去前一个元素等于1,则说明聚集区域还在延伸,跳过当前循环。否则,将上一个聚集区域的起始位置 last 和当前元素 groups[i-1] 作为一个边界,添加到二维向量 res 中,并更新 last 的值为当前元素。 - 最后,将最后一个聚集区域的起始位置
last
和最后一个元素groups[n-1]
作为一个边界,添加到二维向量res
中。 - 返回存储了聚集区域边界的二维向量
res
。