-
汪汪一只猫
两个指针 i,jvar arr = [1,1,1,2,3,4,5,8,10,22,24,25,26,66]var len = arr.lengthvar i = 1, j = 0var 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 }}
-
慕码人2483693
一行python版本:from itertools import groupbyarr = [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)
-
慕码人8056858
贴个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);})();