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>> v = new ArrayList<>(); int ret = groups[0]; for (int i = 1; i < n; ++i) { if (groups[i] - groups[i - 1] == 1) continue; List<Integer> area = new ArrayList<>(); area.add(ret); area.add(groups[i - 1]); v.add(area); ret = groups[i]; } List<Integer> lastArea = new ArrayList<>(); lastArea.add(ret); lastArea.add(groups[n - 1]); v.add(lastArea); int[][] result = new int[v.size()][2]; for (int i = 0; i < v.size(); i++) { result[i][0] = v.get(i).get(0); result[i][1] = v.get(i).get(1); } return result; } }
这段代码使用的编程语言是Java。
该题考察的知识点是数组操作和循环。
这段代码实现了一个函数 findGatheringAreas
,该函数接受一个整数数组 groups
和一个整数 n
作为参数,返回一个二维整数数组 int[][]
类型的结果。
该函数的目标是寻找聚集区域,并将聚集区域的起始和结束位置保存在返回的二维数组中。
代码中的主要逻辑如下:
- 创建一个 List<List<Integer>> 类型的变量 v,用于保存聚集区域的起始和结束位置。
- 创建一个整数变量 ret,初始化为 groups[0],用于保存当前聚集区域的起始位置。
- 使用循环,从下标 1 开始遍历到数组末尾。
- 判断当前元素与前一个元素之间的差是否为 1,如果是,则表示仍然处于同一个聚集区域,继续下一次循环。
- 否则,表示进入了一个新的聚集区域。将当前聚集区域的起始位置 ret 和前一个元素作为结束位置添加到 v 中。
- 更新 ret 为当前元素,表示进入了一个新的聚集区域。
- 循环结束后,最后一个聚集区域的起始位置是 ret,将其与数组末尾的元素作为结束位置添加到 v 中。
- 创建一个二维整数数组 result,大小为 v.size() 行,每行有两列。
- 遍历 v,将其中的聚集区域起始和结束位置保存到 result 中。
- 将 result 返回作为函数的结果。