请教一道算法题,如下,谢谢!

有一个数组[1,1,1,2,3,4,5,8,10,22,24,25,26,66]
请写一个方法把数组变成[1,1,[1,2,3,4,5],8,10,22,[24,25,26],66]
就是把里面连续递增的数字归成一个数组,没思路,有没有好的方案?

米脂
浏览 440回答 3
3回答

汪汪一只猫

两个指针 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++) {&nbsp; if(arr[i]-arr[i-1] !== 1) {&nbsp; &nbsp; i-j===1 ? rst.push(arr[j]) : rst.push(arr.slice(j, i))&nbsp; &nbsp; j = i&nbsp; }}

慕码人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):&nbsp; &nbsp; if arr[i] - arr[i-1] == 1:&nbsp; &nbsp; &nbsp; &nbsp; tmp.append(arr[i])&nbsp; &nbsp; else:&nbsp; &nbsp; &nbsp;&nbsp; &nbsp; &nbsp; &nbsp; res.append(tmp[0] if len(tmp) == 1 else tmp)&nbsp; &nbsp; &nbsp; &nbsp; 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)=>{&nbsp; &nbsp; if(i===0){&nbsp; &nbsp; &nbsp; &nbsp; res.push(a);&nbsp; &nbsp; &nbsp; &nbsp; return res;&nbsp; &nbsp; }&nbsp; &nbsp; if(a-arr[i-1] === 1){&nbsp; &nbsp; &nbsp; &nbsp; if(!Array.isArray(res[res.length-1])){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; res = [...res.slice(0,-1), [...res.slice(-1)]];&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; res[res.length-1].push(a);&nbsp; &nbsp; }else{&nbsp; &nbsp; &nbsp; &nbsp; res.push(a);&nbsp; &nbsp; }&nbsp; &nbsp; return res;}, []);console.log(result);})();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript