[6kyu]Sort the number sequence

該算法題來自于 codewars【語言: javascript】焊傅,翻譯如有誤差趣竣,敬請(qǐng)諒解~

  • 場(chǎng)景

    • 給你一個(gè)包含一些正整數(shù)和零的數(shù)字序列(數(shù)組)脚粟。
[3,2,1,0,5,6,4,0,1,5,3,0,4,2,8,0]

它可以被分割成一些零終止的子序列议双,例如[3,2,1,0]缭保,[5,6,4,0] ...

  • 任務(wù)
  • 首先按照升序?qū)γ總€(gè)子序列進(jìn)行排序(不排序零汛闸,總是在結(jié)尾);
  • 其次,根據(jù)它們的總和值(升序)對(duì)所有子序列進(jìn)行排序艺骂。
    1. 參數(shù):sequence(數(shù)組序列)
    2. 結(jié)果及注意:
    1)結(jié)果為排序后的數(shù)字序列诸老。
    2)如果一些子序列具有相同的和值,則根據(jù)其原始順序進(jìn)行排序
  • 例如:
    sortSequence([3,2,1,0,5,6,4,0,1,5,3,0,4,2,8,0]) ,返回[1,2,3,0,1,3,5,0,2,4,8,0,4,5,6,0]
  sortSequence([3,2,1,0,5,6,4,0,1,5,3,0,2,2,2,0]) ,返回[1,2,3,0,2,2,2,0,1,3,5,4,5,6,0]
  sortSequence([2,2,2,0,5,6,4,0,1,5,3,0,3,2,1,0]) ,返回[2,2,2,0,1,2,3,0,1,3,5,4,5,6,0]

  • 解答
  • 其一
const intercept = sequence => {
      let arr = [];
      sequence.forEach(el=>{el == 0 ? num++ : num});
      for(let i=0;i<num;i++){
        arr.push(sequence.splice(0,sequence.indexOf(0)+1))
      }
      return arr;
}
const sortSequence = sequence => {
      let arr = intercept(sequence);
      let sortArr = arr.map(el => el.splice(0,el.length-1).sort((a,b)=>a-b).concat(0));
      sortArr.sort((a,b) => a.reduce((r,v)=>r+v,0)-b.reduce((r,v)=>r+v,0))
      return sortArr.toString().split(',').map(el=>el*1);
}
  • 其二
function sortSequence(sequence){
      sequence.pop();
      var seqs = [[]];
      for(let n of sequence) {
        if(n)seqs[seqs.length-1].push(n);
        else seqs.push([]);
      }
      seqs = seqs.map(s=>s.sort((a,b)=>a-b)).sort((a,b)=>a.reduce((s,n)=>s+n,0)-b.reduce((s,n)=>s+n,0));
      var res = [];
      for(let s of seqs) res = res.concat(s,0);
      return res;
}
  • 其三
const sortSequence = (arr) => {
      const container = []; 
      let slice = 0;
      for (let i=0; i<arr.length; i++) {
        if (arr[i] === 0) {
          const sliced = arr.slice(slice, i+1); 
          slice = i + 1; 
          sliced.sort((a,b) => a-b).push(sliced.shift()); 
          container.push(sliced);  
        } 
      }
      const result = container.sort((a, b) => a.reduce((acc, val) => acc + val) - b.reduce((acc, val) => acc + val)).reduce((a, b) => a.concat(b)); 
      return result; 
}
  • 其四
function sortSequence(ar){
      let cage = [];
      const forge = ar.reduce((a,e,i) => e ? (cage.push(e),a) : (cage.sort((a,b) => a - b),cage.unshift([cage.reduce((p,v) => p + v, 0),i]),a.push(cage),cage = [],a),[]);
      return forge.sort((a,b) => a[0][0] !== b[0][0] ? a[0][0] - b[0][0] : a[0][1] - b[0][1]).reduce((a,e) => (e.shift(),a.concat(e.concat(0))),[]);
}
  • 其五
function sortSequence(sequence){
      return (sequence+'').split(/\b0\b/)
        .slice(0,-1)
        .map( sub => sub.split(",").filter(x=>x).map(Number).sort((a,b)=>a-b).concat([0]) )
        .reduce( (tmp,sub,i) => tmp.concat({sub:sub,sum:sum(sub),idx:i}), [])
        .sort( (a,b) => a.sum-b.sum || a.idx-b.idx )
        .reduce( (res,sub) => res.concat(sub.sub), [])
}
const sum = arr => arr.reduce((s,v)=>s+ +v, 0);
  • 其六
function sortSequence(seq) {
      var groups = seq.filter(n => n === 0).map(s => []); 
      var n = 0;
      for (var i = 0; i < seq.length; i++) {
        if (seq[i] === 0) {
          groups[n].sort((a, b) => a - b);
          n++;
          continue;
        }
        groups[n].push(seq[i]);
      }  
      groups.sort((a, b) => a.reduce((t, n) => t + n) - b.reduce((t, n) => t + n));  
      return groups.reduce((t, g) => {
        g.push(0);
        return t.concat(g);
      }, []);
}
  • 其七
function sortSequence(seq){
      for(var sub=[],tmp=[],sum=0,i=0,j=0;i<seq.length;i++){
        if(seq[i]==0) {sub.push([tmp.sort((a,b)=>a-b),sum,j++]);tmp=[],sum=0}
        else {sum+=seq[i];tmp.push(seq[i])}
      }
      return sub.sort((a,b)=>a[1]==b[1]?a[2]-b[2]:a[1]-b[1]).reduce((a,b)=>a.concat(b[0],0),[])
}
  • 其八
function sortSequence(seq){
      var arr=[],r=[], p=seq.map((a,i)=>a==0?i:null).filter(a=>a!=null); p.unshift(-1);
      p.slice(1).map((a,i)=>r.push(seq.slice(p[i]+1,a).sort((a,b)=>a-b)));
      r.sort((a,b)=>a.reduce((s,a)=>s+a,0)-b.reduce((s,a)=>s+a,0));
      r.map(a=>arr=arr.concat(a,[0]));
      return arr
}
  • 其九
const plus = (v,w) => v+w ;
const bySum = (v,w) => v.reduce(plus)-w.reduce(plus) ;
const numZeroTrail = (v,w) => v && w && v-w || w-v ;
const sortSequence = a => [ ].concat( ...a.reduce( (acc,v) => ( acc.push( [ ...acc.pop(), v ] ), v || acc.push( [ ] ), acc ), [ [ ] ] ).slice(0,-1).map( v => v.sort(numZeroTrail) ).sort(bySum) ) ;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末彻亲,一起剝皮案震驚了整個(gè)濱河市孕锄,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌苞尝,老刑警劉巖畸肆,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異宙址,居然都是意外死亡轴脐,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門抡砂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來大咱,“玉大人,你說我怎么就攤上這事注益〔杲恚” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵丑搔,是天一觀的道長(zhǎng)厦瓢。 經(jīng)常有香客問我提揍,道長(zhǎng),這世上最難降的妖魔是什么煮仇? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任劳跃,我火速辦了婚禮,結(jié)果婚禮上浙垫,老公的妹妹穿的比我還像新娘刨仑。我一直安慰自己,他們只是感情好夹姥,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布杉武。 她就那樣靜靜地躺著,像睡著了一般佃声。 火紅的嫁衣襯著肌膚如雪艺智。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天圾亏,我揣著相機(jī)與錄音十拣,去河邊找鬼。 笑死志鹃,一個(gè)胖子當(dāng)著我的面吹牛夭问,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曹铃,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缰趋,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了陕见?” 一聲冷哼從身側(cè)響起秘血,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎评甜,沒想到半個(gè)月后灰粮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忍坷,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年粘舟,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佩研。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡柑肴,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旬薯,到底是詐尸還是另有隱情晰骑,我是刑警寧澤,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布绊序,位于F島的核電站硕舆,受9級(jí)特大地震影響隶症,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜岗宣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望淋样。 院中可真熱鬧耗式,春花似錦、人聲如沸趁猴。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽儡司。三九已至娱挨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間捕犬,已是汗流浹背跷坝。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留碉碉,地道東北人柴钻。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像垢粮,于是被迫代替她去往敵國(guó)和親贴届。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)蜡吧。 張土汪:刷leetcod...
    土汪閱讀 12,744評(píng)論 0 33
  • 不支持上傳文件毫蚓,所以就復(fù)制過來了。作者信息什么的都沒刪昔善。對(duì)前端基本屬于一竅不通元潘,所以沒有任何修改,反正用著沒問題就...
    全棧在路上閱讀 1,960評(píng)論 0 2
  • 今年我們20歲耀鸦,踩著青春的尾巴柬批,一腳踏出校園,一腳邁入社會(huì)袖订。因?yàn)槟贻p氮帐,似乎要學(xué)習(xí)的東西很多。我們開始擔(dān)心找工作洛姑,開...
    憂傷傷的向陽花閱讀 345評(píng)論 0 1
  • 人一生的品質(zhì)有很多上沐,誠(chéng)實(shí)、謙虛楞艾、助人参咙、孝順…缺一不可龄广。人一生可以沒錢沒官,但不可以少了做人最基本的品質(zhì)蕴侧,俗話說...
    瑞之景閱讀 233評(píng)論 1 2
  • “祝-您-入-拙幌-愉-快敲才!”說話的是日本機(jī)器人酒店的機(jī)器人前臺(tái)。如果你是下榻該酒店的客人择葡,你會(huì)回應(yīng)它還是看一眼就速...
    微有所思閱讀 790評(píng)論 0 0