题解 | #牧场奶牛集合区域#

牧场奶牛集合区域

https://www.nowcoder.com/practice/89218acf98234315af1cb3a223935318

  1. 题目考察的知识点

数组的特点

  1. 题目解答方法的文字分析

如果数组的长度是0或者1,那么返回空数组或者仅有一个数字的数组。用low和high分别记录区间的最小值和最大值。当high+1和groups[i]不相等,代表区间不连贯,就要将low和high代表的区间记录在arr中。然后将让low和high都指向groups[i]。因为先前的触发条件都是,high和groups[i]的值,所以在数组groups遍历到结尾时,需要加一个判断,认为将整个区间强制记录进arr中

  1. 本题解析所用的编程语言

java

  1. 完整且正确的编程代码
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;
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
11-27 10:48
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务