题解 | #牧场奶牛集合区域#
牧场奶牛集合区域
https://www.nowcoder.com/practice/89218acf98234315af1cb3a223935318
- 题目考察的知识点
数组的特点
- 题目解答方法的文字分析
如果数组的长度是0或者1,那么返回空数组或者仅有一个数字的数组。用low和high分别记录区间的最小值和最大值。当high+1和groups[i]不相等,代表区间不连贯,就要将low和high代表的区间记录在arr中。然后将让low和high都指向groups[i]。因为先前的触发条件都是,high和groups[i]的值,所以在数组groups遍历到结尾时,需要加一个判断,认为将整个区间强制记录进arr中
- 本题解析所用的编程语言
java
- 完整且正确的编程代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param groups int整型一维数组
* @param n int整型
* @return int整型二维数组
*/
public int[][] findGatheringAreas (int[] groups, int n) {
ArrayList<int[]> arr = new ArrayList<int[]> ();
if (groups.length == 0) {
return new int[0][0];
}
if (groups.length == 1) {
return new int[][]{{groups[0],groups[0]}};
}
int low = groups[0];
int high = groups[0];
for (int i = 1; i < groups.length;i++) {
if (i == groups.length - 1 && groups[i] == high + 1) {
int[] temp = new int[] {low, groups[i]};
arr.add(temp);
} else {
if (groups[i] == high + 1) {
high = groups[i];
} else {
int[] temp = new int[] {low, high};
arr.add(temp);
low = groups[i];
high = low;
if(i == groups.length - 1 ){
int[] temp1= new int[] {low, high};
arr.add(temp1);
}
}
}
}
int[][] ans = new int[arr.size()][2];
int p = 0;
for (int[] i : arr) {
ans[p++] = i;
}
return ans;
}
}