亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

請教一道算法題,如下,謝謝!

請教一道算法題,如下,謝謝!

繁花不似錦 2019-05-23 17:22:13
有一個數組[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]就是把里面連續遞增的數字歸成一個數組,沒思路,有沒有好的方案?
查看完整描述

2 回答

?
POPMUISE

TA貢獻1765條經驗 獲得超5個贊

兩個指針i,j
vararr=[1,1,1,2,3,4,5,8,10,22,24,25,26,66]
varlen=arr.length
vari=1,j=0
varrst=[]
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-05-23
?
慕桂英4014372

TA貢獻1871條經驗 獲得超13個贊

一行python版本:
fromitertoolsimportgroupby
arr=[1,1,1,2,3,4,5,8,10,22,24,25,26,66]
print([j[0]iflen(j)==1elsejforjin[[i[1]foriing]fork,gingroupby(enumerate(arr),lambdax:x[1]-x[0])]])
效率和可讀性就忽略好了。
再補個樸素易懂的吧:
arr=[1,1,1,2,3,4,5,8,10,22,24,25,26,66]
res=[]
tmp=[arr[0]]ifarrelse[]
arr=arr+[float('inf')]
foriinrange(1,len(arr)):
current,pre=arr[i],arr[i-1]
ifcurrent-pre==1:
tmp.append(current)
else:
res.extend([tmp]iflen(tmp)>1elsetmp)
tmp=[current]
print(res)
                            
查看完整回答
反對 回復 2019-05-23
  • 2 回答
  • 0 關注
  • 419 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號