知识点

数组,排序

解题思路

先将数组按照升序排序,用start和end来分别存储每次保存的开始位置和结束位置。

在循环中如果遇到当前数不等于上一个数加一的,表示需要存储start和end了;如果等于就更新end的位置。

在结束完循环需要注意要再保存一次start和end,因为循环到最后还没保存最后一次结果。

Java题解

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param groups int整型一维数组 
     * @param n int整型 
     * @return int整型二维数组
     */
    public int[][] findGatheringAreas (int[] groups, int n) {
        // write code here
        Arrays.sort(groups);
        List<int[]> list = new ArrayList<>();
        int start = groups[0], end = groups[0];
        for (int i = 1; i < groups.length; i++) {
            if(groups[i] != groups[i - 1] + 1){
                list.add(new int[]{start,end});
                start = groups[i];
            }
            end = groups[i];
        }
        list.add(new int[]{start,end});
        return list.toArray(new int[list.size()][]);
    }
}