有一个已经按照升序排序的整数数组(可能会出现重复),需要将它按照顺序切割成几个子数组,每个子数组至少包含3个连续的整数
请编写一个函数:
arrSplit(int[] nums)
[输入] nums ,表示需要切割的数组。
[输出]一个集合 ,表示切割后的子数组集合
示例:
1)输入: nums = [1,2,3,3,4,5] ,
输出: output= [ [1,2,3], [3,4,5] ]
2)输入: nums = [1,2,3,4,4,5,7] ,
输出: output= [[1,2,3,4]]
3)输入: nums = [1,2,3,3,4,5,5,6,7,9] ,
输出: output= [[1,2,3], [3,4,5], [5,6,7]]
代码:
public class ArrayTest {
public static void main(String[] args) {
int[] nums = {1,2,3,3,4,5,5,6,7,9};
List<ArrayList> result = arrSplit(nums);
System.out.println("result= "+result);
}
private static List<ArrayList> arrSplit(int[] nums){
ArrayList<ArrayList> listArr = new ArrayList<>(); //记录总数组 因为int[] 需要规定长度所以不方便使用
ArrayList<Integer> list = new ArrayList<>(); //记录子数组
for (int i = 0; i < nums.length; i++) {
if (i== 0 || nums[i-1]+1 == nums[i]){ //如果是第一个数,或者是连续的数,添加进数组
list.add(nums[i]);
if (i == nums.length -1 && list.size() >= 3) //如果是最后一个数并且子数组长度大于3才能添加进数组
listArr.add(list);
}else { //如果数字不连续了
if (list.size() >= 3) //如果子数组长度大于3,添加进数组
listArr.add(list);
list = new ArrayList<>(); //重新创建一个子数组
list.add(nums[i]); //把这个数字当做子数组的第一个数
}
}
return listArr;
}
}
结果:
result= [[1, 2, 3], [3, 4, 5], [5, 6, 7]]