为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米脂 2019-02-26 13:43:51
有一个数组[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]就是把里面连续递增的数字归成一个数组,没思路,有没有好的方案?
查看完整描述

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

  }

}


查看完整回答
反对 回复 2019-03-12
?
慕码人2483693

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)


查看完整回答
反对 回复 2019-03-12
?
慕码人8056858

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);

})();


查看完整回答
反对 回复 2019-03-12
  • 3 回答
  • 0 关注
  • 439 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号