先给程序(豆包生成):
% 输入有序数组(无重复整数)
arr = [1,2,3,5,6,8,9,10,12,13,14,15];
% 步骤1:计算差分(后一个元素 - 前一个元素),找到中断点(差分≠1的位置)
diff_arr = diff(arr); % 差分结果:[1,1,2,1,2,1,1,2,1,1,1]
break_points = find(diff_arr ~= 1); % 中断点位置(+1是因为diff结果长度比原数组少1)
% 步骤2:按中断点拆分数组为子组
if isempty(break_points)
% 无中断点,整个数组为一组
groups = {arr};
else
% 拆分逻辑:从开头到第一个断点,第一个断点到第二个断点,...,最后一个断点到结尾
groups = mat2cell(arr, 1, diff([0, break_points, length(arr)]));
end
% 输出结果
fprintf('分组结果:\n');
for i = 1:length(groups)
fprintf('第%d组:%s\n', i, num2str(groups{i}));
end
程序结果:
分组结果:
第1组:1 2 3
第2组:5 6
第3组:8 9 10
第4组:12 13 14 15
关于mat2cell,见文章:
matlab中的mat2cell及cellfun使用-腾讯云开发者社区-腾讯云 (tencent.com)
mat2cell(arr, 1, 拆分长度):将一维数组按指定长度拆分为细胞数组。