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

文章目录

  • 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) returnconst 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.mzph.cn/news/149818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构与算法编程题2

逆置线性表&#xff0c;使空间复杂度为 O(1) #include <iostream> using namespace std;typedef int ElemType; #define Maxsize 100 #define OK 1 #define ERROR 0 typedef struct SqList {ElemType data[Maxsize];int length; }SqList;void Init_SqList(SqList& …

YOLOV8部署Android Studio安卓平台NCNN

下载Android Studio&#xff0c;配置安卓开发环境&#xff0c;这个过程比较漫长。 安装cmake&#xff0c;注意安装的是cmake3.10版本。 根据手机安卓版本选择相应的安卓版本&#xff0c;我的是红米K30Pro&#xff0c;安卓12。 使用腾讯开源的ncnn&#xff0c;这是一个为手机端极…

驶入产业发展快车道,汉鑫科技人工智能研发中心正式启用!

11月18日&#xff0c;汉鑫科技人工智能研发中心正式启用。中心立足烟台&#xff0c;服务全国&#xff0c;聚焦工业智能、智能网联、智慧城市三大业务板块&#xff0c;以人工智能技术赋能政企实现“数智化”转型升级。该中心的启用标志着汉鑫科技在人工智能研发应用领域迈上了新…

移动端表格分页uni-app

使用uni-app提供的uni-table表格 网址&#xff1a;https://uniapp.dcloud.net.cn/component/uniui/uni-table.html#%E4%BB%8B%E7%BB%8D <uni-table ref"table" :loading"loading" border stripe type"selection" emptyText"暂无更多数据…

Java的构造器

构造器 1.package com.msb2; 2. 3./** 4. * Auther: msb-zhaoss 5. */ 6.public class Person { 7. //构造器&#xff1a;没有任何参数的构造器我们叫做&#xff1a;空参构造器--》空构造器 8. public Person(){ 9. /*age 19; 10. name "lili"…

【Nacos】配置管理、微服务配置拉取、实现配置热更新、多环境配置

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 Nacos 一、nacos实现配置管理1.1 统一配置管…

Taro安装及使用

安装及使用 安装​ Taro 项目基于 node&#xff0c;请确保已具备较新的 node 环境&#xff08;>12.0.0&#xff09;&#xff0c;推荐使用 node 版本管理工具 nvm 来管理 node&#xff0c;这样不仅可以很方便地切换 node 版本&#xff0c;而且全局安装时候也不用加 sudo 了…

不必购买Mac,这款国产设计工具能轻松替代Sketch!

介绍 即时设计是新一代可以直接在浏览器中使用的设计工具&#xff0c;具有Sketch和实时协作功能。与本地Sketch相比&#xff0c;增加了实时协作功能&#xff0c;即时设计可以看作是在线Sketch&#xff0c;两个工具可以简单粗暴地总结为一个公式&#xff1a; 即时设计Sketch云…

Nginx - 本机读取服务器图像、视频

目录 一.引言 二.安装 Nginx 1.安装 By apt 2.安装 By 官网 三.配置 Nginx 1.Linux 机器配置 2.重启 Nginx 服务 3.本机查看机器文件 四.总结 一.引言 前面介绍了 GFP-GAN、PNG2GIF、GIF2PNG 等操作&#xff0c;我们生成的 video、gif、png 等形式的文件都存储在 lin…

Nginx(反向代理,负载均衡,动静分离)

反向代理 Nginx反向代理是一种将客户端请求转发给后端服务器的技术&#xff0c;即反向代理服务器。在这种架构中&#xff0c;客户端请求首先到达Nginx服务器&#xff0c;然后由Nginx服务器将请求转发给后端服务器&#xff0c;后端服务器响应请求&#xff0c;并将响应传递回Ngi…

【wp】2023第七届HECTF信息安全挑战赛 Web

伪装者 考点&#xff1a;http协议flask的session伪造ssrf读取文件 首先根据题目要求就行伪造HTTP 这里不多说&#xff0c;比较基础 然后下面得到是个登入 页面&#xff0c;我们输入zxk1ing 得到 说什么要白马王子 &#xff0c;一眼session伪造 看到ey开头感觉是jwt 输入看看 得…

通达信的ebk文件

我们在通达信软件中 调出 “自定义板块设置” 这个菜单&#xff0c;点击“导出”&#xff0c;会提示你存储 “自选股.EBK”&#xff0c;其实就是对自定义板块里的目录进行备份的一种方式&#xff0c; 当我们打开 这个文件&#xff0c;你会发现其实就是存储了 股票代码&#xff…

CRM系统定制开发价格

我们都知道&#xff0c;CRM系统对企业有着很大的帮助。但是市面上大多数CRM系统都是标准化的&#xff0c;无法满足那些产品线复杂&#xff0c;或者有着特殊需求的企业。这个时候&#xff0c;就需要对CRM系统进行二次开发。那么&#xff0c;CRM系统二次开发的价格是多少&#xf…

快手运营的必备的10个工具

一、引言 快手作为短视频领域的佼佼者&#xff0c;为众多创作者提供了广阔的舞台。要想在快手运营中取得成功&#xff0c;掌握一些必备的工具是必不可少的。本文将为您介绍快手运营的10个必备工具&#xff0c;帮助您提高工作效率&#xff0c;优化内容创作。 二、工具推荐 1. …

Linux(4):Linux文件与目录管理

目录与路径 相对路径在进行软件或软件安装时非常有用&#xff0c;更加方便。利用相对路径的写法必须要确认目前的路径才能正确的去到想要去的目录。 绝对路径的正确度要比相对路径好&#xff0c;因此&#xff0c;在写程序&#xff08;shell scripts&#xff09;来管理系统的条…

centos oracle11g开启归档模式

要在 CentOS 上停止 Oracle 11g 数据库&#xff0c;你可以按照以下步骤操作&#xff1a; 1.登录到操作系统 首先&#xff0c;使用具有足够权限的用户登录到 CentOS 操作系统。通常情况下&#xff0c;你需要以具有 oracle 用户权限的用户登录。 使用 SYSDBA 权限连接到数据库…

装备中国功勋企业——兰石重装,建设LTC全流程管理|基于得帆云低代码的CRM案例系列

兰石重型装备股份有限公司 兰石重型装备股份有限公司&#xff08;以下简称“兰石重装”&#xff09;成立于2001年&#xff0c;经营范围为炼油、化工、核电等能源领域所需的装备的设计、制造、安装、成套与服务&#xff1b;工程项目建设与服务&#xff1b;机械加工&#xff1b;检…

通过多线程的方式每次发送10条MQ消息

背景&#xff1a;传入一个List<person>,不知道list中有多少条数据。 import org.apache.rocketmq.client.producer.DefaultMQProducer; import org.apache.rocketmq.client.producer.Message; import org.apache.rocketmq.client.producer.SendResult;import java.util.A…

安全+Linux!IBM新一代大型机Z14全新发布

导读本周&#xff0c;以“架构 人机同行”为主题的IBM Systems创行者高峰论坛在北京召开&#xff0c;IBM全球及大中华区硬件系统部负责人&#xff0c;金融、医疗、制造等领域的企业、合作伙伴共与这一年度盛会&#xff0c;探讨认知时代下的基础架构技术趋势及IBM硬件系统业务的…

微积分在神经网络中的本质

calculus 在一个神经网络中我们通常将每一层的输出结果表示为&#xff1a; a [ l ] a^{[l]} a[l] 为了方便记录&#xff0c;将神经网络第一层记为&#xff1a; [ 1 ] [1] [1] 对应的计算记录为为&#xff1a; a [ l ] &#xff1a; 第 l 层 a [ j ] &#xff1a; 第 j 个神经…