【小算法】相连数字数组,用横杠起止简写

29,487次阅读
没有评论

共计 877 个字符,预计需要花费 3 分钟才能阅读完成。

前言

本题是工作中用到的一个小的算法题目,刚刚做的时候,走了一下弯路,其实思路对了,解起来很简单。下面来解析一下。后期我会整理一份常用的算法题目,每个题目都会录制成视频,和大家一起分享解题思路。有些也会借鉴 leecode 中的一些题目。

题目

// 一组数字,相连的用 - 拼接,不相连的直接写数字本身,// 例如 [1,3,4,5,8,9,12,13,14,15,20] 可以写成 1;3-5;8-9;12-15;20 这种形式。

思路

1、先把数组按照从小到大排序

2、找出数字开始位置

3、找出数字结束位置

4、开始和结束用横杠拼接

标注数字开始位置

以 [1,3,4,5,8,9,12,13,14,15,20]这个数组为例,1 前后无相连,直接放到新的数组里面,3,前面无相连,后面有相连的,为起始值,标注为开始位置。

标注结束位置

数组 5,前面有相连的 4,后面无相连,标注为结束位置。

解题代码

let Arry=[1,3,4,5,8,9,12,13,14,15,20]

// 需求,一组数字相连的用 - 链接,然后用; 拼接起来

const handleNumberArray =(Arry)=>{

  let start =''
  let result =[]
  Arry = Arry.sort((a,b)=>a-b)
  Arry.forEach((item,index)=>{if(item+1 == Arry[index+1] && item-1 !=Arry[index-1]){start = item // 标注开始位置} else if(item-1 == Arry[index-1] && item+1 != Arry[index+1]) {result.push(`${start}-${item}`)// 结束位置的时候放到数组里面

    } else if(item-1 != Arry[index-1] && item+1 != Arry[index+1]){result.push(item)// 前后不相连,放到数组里面
    }
  })
  return result.join(';')
}

相关视频

小算法

推荐视频

1、js 的 proto 和 prototype 区别

2、秒懂 js 的 constructor

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计877字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)