题解 | #牧场奶牛集合区域#
牧场奶牛集合区域
https://www.nowcoder.com/practice/89218acf98234315af1cb3a223935318?tpId=354&tqId=10589478&ru=/exam/oj&qru=/ta/interview-202-top/question-ranking&sourceUrl=%2Fexam%2Foj%3Fpage%3D1%26tab%3D%25E7%25AE%2597%25E6%25B3%2595%25E7%25AF%2587%26topicId%3D354
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<int[]> result = new ArrayList<>(); int start = 0; int end = 0; for (int i = 0; i < groups.length; i++) { if (i > 0 && groups[i] - groups[i - 1] != 1) { // Found a gap, record the current range result.add(new int[] {groups[start], groups[end]}); // Update the start pointer for the next range start = i; } // Update the end pointer for the current range end = i; } // Add the last range result.add(new int[] {groups[start], groups[end]}); int[][] resultArray = new int[result.size()][]; for (int i = 0; i < result.size(); i++) { resultArray[i] = result.get(i); } return resultArray; } }
考察的知识点:
- 数组遍历:通过遍历数组来查找连续的区间。
- 指针操作:维护起始位置和结束位置的指针来记录区间。
- 列表操作:使用列表来记录找到的连续整数区间范围。
解题思路分析:
这个问题要求找出覆盖给定有序整数数组中所有编号的最小连续整数区间范围列表。我们需要从数组中找出连续的区间,使得这些区间中包含数组中的所有编号,并且不能包括数组中没有的元素。
一种方法是遍历数组,同时维护两个指针,一个指针指向当前区间的起始位置,另一个指针往后遍历找到区间的结束位置。当我们找到一个连续的区间,它包含了数组中的所有编号时,我们记录这个区间,然后更新起始位置的指针为当前位置的下一个位置。