猿问

数字串不均匀位置检测算法

给定一个数字串,检测其不均匀数字的位置。比如:

输入"1 2 2" 返回 "1"

输入"1 2 1 1" 返回 "2"

输入"2 4 7 8 10" 返回 "3" 


莫回无
浏览 470回答 1
1回答

撒科打诨

如果不均匀度是指奇偶性的话,代码如下:function&nbsp;test(str)&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;arr&nbsp;=&nbsp;str.split("&nbsp;");&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;even&nbsp;=&nbsp;arr.filter(v=>!(v%2));&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;odd&nbsp;=&nbsp;arr.filter(v=>!!(v%2));&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;isNaN(+even)?+odd:+even; }如果不均匀度指不符合等差数列的项的话,代码如下:function&nbsp;test(str){&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;arr&nbsp;=&nbsp;str.split("&nbsp;");&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//数组长度小于3抛出错误 &nbsp;&nbsp;&nbsp;&nbsp;if(arr.length&nbsp;<&nbsp;3){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;Error("Array&nbsp;length&nbsp;can't&nbsp;less&nbsp;than&nbsp;3."); &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp;//数组长度为3时不能从等差数列判断 &nbsp;&nbsp;&nbsp;&nbsp;//假如数组中有两个元素相同,则返回剩下的一个元素 &nbsp;&nbsp;&nbsp;&nbsp;if(arr.length&nbsp;==&nbsp;3){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;r&nbsp;=&nbsp;arr.filter(v=>v!=a[0]);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;r.length==1&nbsp;?&nbsp;+r&nbsp;:&nbsp;a[0]; &nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//数组长度大于3 &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;d&nbsp;=&nbsp;[];&nbsp;&nbsp;&nbsp;&nbsp;//储存数列中每两个元素间的等差项&nbsp;如:&nbsp;[1,2,6,4]=>[1,4,-2] &nbsp;&nbsp;&nbsp;&nbsp;arr.reduce(function(p,n){ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;d.push(n-p);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;n; &nbsp;&nbsp;&nbsp;&nbsp;});&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//d[0]的值是否唯一 &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;d0u&nbsp;=&nbsp;!isNaN(+d.filter(v=>v==d[0]));&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;//d[1]的值是否唯一 &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;d1u&nbsp;=&nbsp;!isNaN(+d.filter(v=>v==d[1]));&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;if(d0u&nbsp;&&&nbsp;d1u){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(d[0]+d[1]==2*d[2])&nbsp;&nbsp;&nbsp;&nbsp;//例:&nbsp;arr:[0,1,0,0],&nbsp;d:[1,-1,0] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;+arr[1];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//例:&nbsp;arr:[0,0,1,0],&nbsp;d:[0,1,-1] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;+arr[2]; &nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;if(d0u){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//例:&nbsp;arr:[1,0,0,0],&nbsp;d:[-1,0,0] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;+arr[0]; &nbsp;&nbsp;&nbsp;&nbsp;}else&nbsp;if(d1u){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//例:&nbsp;arr:[0,0,1,0,0],&nbsp;d:[0,1,-1,0] &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;+arr[2];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//以上是从arr前3项不能推出正确等差数列的特殊情况 &nbsp;&nbsp;&nbsp;&nbsp;}else{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//一般情况:arr[0],arr[1],arr[2]为等差项,可以直接推导等差数列的通项公式 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;d[0]为数组的公差,arr[0]为首项,筛选出不符合数组通项公式的数组元素 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;+arr.filter((v,i)=>v!=(+arr[0]+i*d[0])); &nbsp;&nbsp;&nbsp;&nbsp;} }
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答