(编程题)范围提取

范围提取(编程题)

描述:(JavaScript解决)

给定一个升序数组,在超过连续的3个数时进行范围提取,如[1,2,3],则返回"1-3"最后返回一个字符串,例如给定:[-5,-4,-3,-2,1,2,3,4,6,7,9,10,11,12,16,18,19,20,21,22],则返回字符串“-5 - -2,1-4,6,7,9-12,16,18-22,”,又如[1,2,5,7,8,10],则返回“1,2,5,7,8,10”。

思路:
用一个开始标记start记录开始数字位置,用一个长度标记numlong记录循环后的长度,当遍历循环时出现不连续,则进行判断,如果这时候的长度大于等于3,则进行范围提取,然后开始标记start重设为当前数字位置,长度标记设为0,如果长度小于3,则进行数字拼接,用一个while循环拼接。最后判断最后一个字符。

代码:

let fun = (arr) =>{
				let len = arr.length //输入数组的长度
				let result = "" //输出结果字符串
				let start = arr[0] //开始的字符串
				let numlong = 0 //记录每一次的长度
				let flag = false //标记位,解决最后一个数问题
				for(let i=1; i < len; i++) {
					numlong++
					//当出现不连续时的情况,进行判断
					if(((start+numlong) != arr[i] ) || (i == len - 1)) {
						//解决最后一个的问题判断
						if((arr[len-1] == arr[len-2] + 1) && (i == len - 1)) {
							 numlong ++
							 flag = true
						}				
						//当出现连续超过3个时
						if(numlong >= 3) {
							let count = start + numlong - 1
							result +=  "" + start + "-" + count +","
							//初始化
							start = arr[i]
							numlong = 0
						} else {
							//未出现3个连续的情况,直接拼接
							while(numlong > 0) {
								result += "" + arr[i-numlong] + ","
								numlong--
							}
							//初始化
							start = arr[i]
						}
					}
					
				}
				//判断最后一个数
				if (!flag) {
					result += "" + arr[len-1]
				}
				console.log(result)
			}
			// let s = [1,2,5,7,8,10]
			let s = [-5,-4,-3,-2,1,2,3,4,6,7,9,10,11,12,16,18,19,20,21,22]
			fun(s)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值