如何按缺失整数拆分连续整数数组并生成arrayFinal?
解决数组按缺失整数拆分的问题
我来帮你搞定这个数组拆分的需求!核心思路是通过遍历数组,跟踪当前连续的子数组,当遇到不连续的整数时,就把当前子数组存入最终结果,再开启新的子数组。这里不需要用字符串的split方法,直接通过遍历就能实现,逻辑很清晰。
先举个直观的例子
假设输入数组是
[1,2,3,5,6,8,9],缺失了4和7,那么最终的arrayFinal应该是:[[1,2,3], [5,6], [8,9]]
JavaScript实现代码
function splitArrayByMissingNumbers(arr) { // 处理空数组的边界情况 if (!arr || arr.length === 0) return []; const arrayFinal = []; // 初始化当前子数组,放入第一个元素 let currentSubarray = [arr[0]]; for (let i = 1; i < arr.length; i++) { // 检查当前数字是否和前一个数字连续(差值为1) if (arr[i] === arr[i-1] + 1) { currentSubarray.push(arr[i]); } else { // 遇到缺失的整数,把当前子数组存入结果,重置当前子数组 arrayFinal.push(currentSubarray); currentSubarray = [arr[i]]; } } // 别忘了把最后一个子数组加入结果 arrayFinal.push(currentSubarray); return arrayFinal; } // 测试示例 const inputArray = [1,2,3,5,6,8,9]; const arrayFinal = splitArrayByMissingNumbers(inputArray); console.log(arrayFinal); // 输出 [[1,2,3], [5,6], [8,9]]
Python实现代码
如果你用Python,逻辑是完全一致的:
def split_array_by_missing_numbers(arr): if not arr: return [] array_final = [] current_subarray = [arr[0]] for i in range(1, len(arr)): if arr[i] == arr[i-1] + 1: current_subarray.append(arr[i]) else: array_final.append(current_subarray) current_subarray = [arr[i]] # 添加最后一个子数组 array_final.append(current_subarray) return array_final # 测试示例 input_array = [1,2,3,5,6,8,9] array_final = split_array_by_missing_numbers(input_array) print(array_final) # 输出 [[1,2,3], [5,6], [8,9]]
逻辑说明
- 先处理空数组的边界情况,避免运行报错
- 初始化最终结果数组
arrayFinal,以及当前正在收集的子数组currentSubarray - 从第二个元素开始遍历数组,判断当前元素是否和前一个元素连续(差值为1)
- 连续就加入当前子数组,不连续则将当前子数组存入结果,重置当前子数组
- 遍历结束后,一定要把最后一个子数组也加入结果(因为循环里不会处理最后一段连续序列)
这个方法的时间复杂度是O(n),只需要遍历一次数组,效率很高,而且逻辑易懂,适合各种场景。
内容的提问来源于stack exchange,提问作者Kunal Kumar
相关产品推荐
相关产品推荐

