3 回答

TA贡献1898条经验 获得超8个赞
两个指针 i,j
var arr = [1,1,1,2,3,4,5,8,10,22,24,25,26,66]
var len = arr.length
var i = 1, j = 0
var rst = []
for(; i <= len; i++) {
if(arr[i]-arr[i-1] !== 1) {
i-j===1 ? rst.push(arr[j]) : rst.push(arr.slice(j, i))
j = i
}
}

TA贡献1860条经验 获得超9个赞
一行python版本:
from itertools import groupby
arr = [1,1,1,2,3,4,5,8,10,22,24,25,26,66]
print([j[0] if len(j) == 1 else j for j in [[i[1] for i in g] for k, g in groupby(enumerate(arr), lambda x: x[1] - x[0])]])
效率和可读性就忽略好了。
那就补个朴素易懂的吧:
arr = [1,1,1,2,3,4,5,8,10,22,24,25,26,66]
tmp = [arr[0]]
res = []
length = len(arr)
for i in range(1, length):
if arr[i] - arr[i-1] == 1:
tmp.append(arr[i])
else:
res.append(tmp[0] if len(tmp) == 1 else tmp)
tmp = [arr[i]]
res.append(tmp[0] if len(tmp) == 1 else tmp)

TA贡献1803条经验 获得超6个赞
贴个js版的
(function(){
let arr = [1,2,3,1,1,2,3,4,5,8,10,22,24,25,26,66,67];
let result = arr.reduce((res, a, i)=>{
if(i===0){
res.push(a);
return res;
}
if(a-arr[i-1] === 1){
if(!Array.isArray(res[res.length-1])){
res = [...res.slice(0,-1), [...res.slice(-1)]];
}
res[res.length-1].push(a);
}else{
res.push(a);
}
return res;
}, []);
console.log(result);
})();
添加回答
举报