扫码关注官方订阅号
给定一个数字串,检测其不均匀数字的位置。比如:
输入"1 2 2" 返回 "1" 输入"1 2 1 1" 返回 "2" 输入"2 4 7 8 10" 返回 "3"
光阴似箭催人老,日月如移越少年。
function test(str) { var arr = str.split(" "); var even = arr.filter(v=>!(v%2)); var odd = arr.filter(v=>!!(v%2)); return isNaN(+even)?+odd:+even; }
function test(str){ var arr = str.split(" "); //数组长度小于3抛出错误 if(arr.length < 3){ throw new Error("Array length can't less than 3."); } //数组长度为3时不能从等差数列判断 //假如数组中有两个元素相同,则返回剩下的一个元素 if(arr.length == 3){ var r = arr.filter(v=>v!=a[0]); return r.length==1 ? +r : a[0]; } //数组长度大于3 var d = []; //储存数列中每两个元素间的等差项 如: [1,2,6,4]=>[1,4,-2] arr.reduce(function(p,n){ d.push(n-p); return n; }); //d[0]的值是否唯一 var d0u = !isNaN(+d.filter(v=>v==d[0])); //d[1]的值是否唯一 var d1u = !isNaN(+d.filter(v=>v==d[1])); if(d0u && d1u){ if(d[0]+d[1]==2*d[2]) //例: arr:[0,1,0,0], d:[1,-1,0] return +arr[1]; else //例: arr:[0,0,1,0], d:[0,1,-1] return +arr[2]; }else if(d0u){ //例: arr:[1,0,0,0], d:[-1,0,0] return +arr[0]; }else if(d1u){ //例: arr:[0,0,1,0,0], d:[0,1,-1,0] return +arr[2]; //以上是从arr前3项不能推出正确等差数列的特殊情况 }else{ //一般情况:arr[0],arr[1],arr[2]为等差项,可以直接推导等差数列的通项公式 // d[0]为数组的公差,arr[0]为首项,筛选出不符合数组通项公式的数组元素 return +arr.filter((v,i)=>v!=(+arr[0]+i*d[0])); } }
这里所谓的不均匀度其实就是数字的奇偶性差异,明白了这一点,其实很容易知道怎么做了。
function iqTest(numbers) { var arr = numbers.split(' '); var len = arr.length, evenArr = [], oddArr = []; for (var i = 0; i < len; i ++) { arr[i] % 2 === 0 ? oddArr.push([arr[i], i+1]) : evenArr.push([arr[i], i+1]) } return (oddArr.length > evenArr.length ? evenArr[0][1] : oddArr[0][1]) } console.log(iqTest("2 4 7 8 10")) // 输出3 console.log(iqTest("1 2 1 1")) // 输出2 console.log(iqTest("1 2 2")) // 输出1
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
如果不均匀度是指奇偶性的话,代码如下:
如果不均匀度指不符合等差数列的项的话,代码如下:
这里所谓的不均匀度其实就是数字的奇偶性差异,明白了这一点,其实很容易知道怎么做了。