当前位置: 首页 > article >正文

每天一道算法题(五)——判断一组数字是否连续,出现连续数字的时候以‘-’输出

文章目录

  • 1、问题
  • 2、示例
  • 3、解决方法
    • (0)错误示范——两个for循环遍历
    • (1)方法1(递归)
    • (2)方法2(推荐)


1、问题

实现一个函数,判断一组数字是否连续。当出现连续数字的时候以‘-’输出。

2、示例

如: const arr = [ 2, 3, 4, 7, 8, 9, 10,13,15,16]
期望结果:[“2-4”, “7-10”, 13, 15-16]

3、解决方法

(0)错误示范——两个for循环遍历

如果第n项-n+1项 == 1说明连续,就返回连续的值,但是这样无法输出7-10这种多个连续的数据,只能输出2-4这种单个连续的数据。如果使用 for循环需要定义来获取初始值(获取7-10中的10)。可惜的是我依旧没有写出这种写法。

(1)方法1(递归)

const arr = [ 2, 3, 4, 7, 8, 9, 10,13,15,16]
const newArr = [];
function getArray(arr, index, target) {
    if (!arr.length) return
    const item = arr[index]
    const item2 = arr[index+1]
    if (item + 1 !== item2) {
        if (target) {
            newArr.push(`${target}-${item}`)
            getArray(arr.slice(index+1), 0)
        } else {
            newArr.push(item)
            getArray(arr.slice(1), 0)
        }
    } else {
        getArray(arr, index+1, target || item)
    }
}
getArray(arr, 0)
console.log(newArr)

(2)方法2(推荐)

const arr = [ 2, 3, 4, 7, 8, 9, 10,13,15,16]
function getArray(arr){
    var start= '' // 1:存储第一项的数据
    var newArr = [] // 2: 存储返回的新数据
    arr.forEach((item,index)=>{
        // 3。1:第一项+1 == 第二项   并且  第一项-1 != 第0项
        if(item + 1 == arr[index+1] && item -1 != arr[index-1]){
            // 说明左边不连续,右边连续,也就是第一项
            start = item
        } else if(item + 1 != arr[index+1] && item -1 == arr[index-1]){
            // 3.2:item+1不等于item的后一项 并且 item-1等于item的前一项
            // 说明当前遍历的第一项(start)和当前item是连续的,但是和后面一项不连续(相当于7-10的10)
            // 关键点:如果是7-10的话,中间的8、9都没有进行对比,直接不管这步,将返回的前后控制好就有效果
            newArr.push(start + '-' + item)
        }else if(item + 1 != arr[index+1] && item -1 != arr[index-1]){
            // 3.3:item+1不等于item的后一项 并且 item-1不等于item的前一项
            // 说明当前的item值和前一项后一项都不连续,所以单独加入(相当于示例的13)
            newArr.push(item)
        }
    })
    console.log(newArr);
}
getArray(arr);

http://www.kler.cn/a/134783.html

相关文章:

  • 操作系统lab4-页面置换算法的模拟
  • 如何保护 Microsoft 网络免受中间人攻击
  • 408模拟卷较难题(无分类)
  • Springboot配置全局异常通用返回
  • 【设计模式】行为型模式(二):策略模式、命令模式
  • 前端请求后端php接口跨域 cors问题
  • Flutter笔记:目录与文件存储以及在Flutter中的使用(上)
  • Git 提交竟然还能这么用?
  • css设置下划线
  • MCU内存基础知识
  • 下载node-sass
  • Vue 3.0 中重置 reactive 定义的响应式对象数据,恢复为初始值
  • grafana面板介绍
  • 深入分析高性能互连点对点通信开销
  • 搭建 AI 图像生成器 (SAAS) php laravel
  • 详解使用asyncio实现playwright并发操作(复制源码即可运行)
  • [Kettle] 生成记录
  • 3.8-镜像的发布
  • Kotlin学习——hello kotlin 函数function 变量 类 + 泛型 + 继承
  • 创建maven项目
  • Shell判断:流程控制—if(三)
  • 微服务实战系列之Gateway
  • MidJourney笔记(1)-入门
  • 九章云极DataCanvas大模型系列成果发布会重磅来袭,诚邀见证!
  • 程序设计实践学习笔记
  • 充电桩负载测试需要检测哪些项目