var arr=[1,2,5,7,10,11,12,15,19,20,21,22];
/*----自定义的排序函数---*/
function arr_sort(arr,tag){
for (var i=0;i<arr.length;++i)
{
var one=arr[i];
for (var n=i+1;n<arr.length;++n)
{
var two=arr[n];
switch (tag)
{
case 'asc':
if (one>two)
{
arr[i]=two;
arr[n]=one;
}
break;
case 'desc':
if (one<two)
{
arr[i]=two;
arr[n]=one;
}
break;
}
}
}
}
/*-----提取连续数组元素-----*/
function get_data(arr){
var result=new Array();
var index=1;
arr_sort(arr,'asc');
function _get_data(){
var rel=new Array();
for (var i=index-1;i<arr.length;++i)
{
if (rel.length<1)
{
rel.push(arr[i]);
}else{
for (var n=rel.length-1;n<rel.length;++n)
{
if (Math.abs(rel[n]-arr[i])==1)
{
var tip=true;
for (var t=0;t<result.length;++t)
{
if (result[t]==arr[i])
{
tip=false;
break;
}else{
tip=true;
}
}
if (tip)
{
rel.push(arr[i]);
}
}
}
}
}
if (rel.length>=3)
{
result.push(rel);
}
if (index<arr.length)
{
index++;
_get_data();
}
}
_get_data();
var tip=false;
for (var i=0;i<result.length;++i)
{
var pre=result[i];
if (tip)
{
tip=false;
continue;
}
for (var n=0;n<pre.length;++n)
{
for (var i1=i+1;i1<result.length;++i1)
{
for (var n1=0;n1<result[i1].length;++n1)
{
if (tip)
{
break;
}
if (pre[n]===result[i1][n1])
{
if (pre.length>result[i1].length)
{
result.splice(i1,1);
i--;
i1--;
tip=true;
break;
}else{
result.splice(i,1);
i--;
i1--;
tip=true;
break;
}
}
}
}
}
}
return result;
}
var result=get_data(arr);
alert('原数组是:'+arr.join(' ')+'\n\n'+'提取后的结果是:'+result.join(' ---分隔符--- '));
一次遍历搞定,肯定没有比这更快的方法了。
附上代码:
lz 是直接来 要 代码的吧?
之前代码确实有问题,没看清题目,已经有人提供了正确的代码
前面的大神们都已经有了如此短小精悍的代码实现。
作为一个不是很流弊的我,就不客气的放出冗长,拖沓的代码了哈,提供对比(O(∩_∩)O):
<script>
</script>
二分查找好像