首页 新闻 搜索 专区 学院

js 判断数组元素是否为连续数字

0
悬赏园豆:20 [已解决问题] 解决于 2013-10-06 11:45

如题,var a = [1,2,3,4];  var b = [1,2,4];

判断数组a为true,数组b为false

js
问题补充:

是否为从1开始的连续数字

Flameman的主页 Flameman | 初学一级 | 园豆:45
提问于:2013-06-21 16:11
< >
分享
最佳答案
0

可以抓取数组中最小和最大的数,例如最小为1,最大为100, 然后看数组中的数的和跟从1加到100的值是否相等,若相等则为true,否则为false

收获园豆:8
webaspx | 小虾三级 |园豆:1973 | 2013-06-21 16:31

你这个实现思路肯定不可行,就按照你说的,如果数组中100个数,最小1,最大是100,但是其中有排列1,3,2,4,....其余是顺序排列的,相加合肯定也相等咯,但实事是并不顺序排列。

把握住连续数字

潇洒一回 | 园豆:186 (初学一级) | 2013-06-21 17:38

@潇洒一回: 哦,没注意看“连续数字”。

webaspx | 园豆:1973 (小虾三级) | 2013-06-24 09:21
其他回答(6)
-1
//判断数组是否是从1开始的连续数字
function isContinuationInteger(array){
    var i=0;
    var isContinuation=true;
    for(var e in array){
        i++;
        if(array[e]!=i){
            isContinuation=false;
            break;
        }
    }
    return isContinuation;
}
收获园豆:2
幻天芒 | 园豆:36781 (高人七级) | 2013-06-21 16:30
0

根据楼主给的信息,时间复杂度应该为O(n),一楼靠谱。

收获园豆:2
在大地画满窗子 | 园豆:102 (初学一级) | 2013-06-21 17:31

一楼也不靠谱

支持(0) 反对(0) @version | 园豆:211 (菜鸟二级) | 2013-06-22 16:26
0

   var a=[3,4,5,6,7,8];
        a.sort();
        var b=[];
        for(var i=a[0];i<=a[a.length-1];i++)
        {
            b.push(i);
        }
 
        if(a.toString()===b.toString()){
            alert(true);
         }
        else{
            alert(false);
        }

收获园豆:2
Yu | 园豆:12950 (专家六级) | 2013-06-21 21:16
0

连续数组的特点:

  1. 全部是数字;
  2. 从小到大排列或从大到小排列
  3. 第一个元素和最后一个元素相差(数组长度-1)

下述算法没有排除[3.1,4.1,5.1,6.1,7.1,8.1]

function isContinuationInteger(array){
    if(!array){
        //数组为null
        return false;
    }
    if(array.length==0){
        //数组为[]
        return true;
    }
    var len=array.length;
    var n0=array[0];
    var sortDirection=1;//默认升序
    if(array[0]>array[len-1]){
        //降序
        sortDirection=-1;
    }
    if((n0*1+(len-1)*sortDirection)!==array[len-1]){
        //筛除['3',4,5,6,7,8]
        return false;
    }
    var isContinuation=true;
    for(var i=0;i<len;i++){
        if(array[i]!==(i+n0*sortDirection)){
            isContinuation=false;
            break;
        }
    }
    return isContinuation;
}
收获园豆:2
@version | 园豆:211 (菜鸟二级) | 2013-06-22 17:02

不错

支持(0) 反对(0) @version | 园豆:211 (菜鸟二级) | 2013-06-22 17:09
0

(前提数组存的是正数)

 

 

1.  数组排序   小-->大

2.  1)数组个数是否为 等于  最大数减去最小数的结果加1

          否--》false

          是-->goto  下一步

     2)  数组最小的数字连续求和加到数组最大的数 为N1(N1是假设是连续递增为1的和)

          继续求和数组实际元素的相加之和为  N2

          N1=N2   ---->  连续

          N1!=N2 ----》 return false  

           

    

收获园豆:2
水墨.MR.H | 园豆:280 (菜鸟二级) | 2013-06-22 19:24
0
function count(arry)
        {
            var length = arry.Length;
            if (length == 0)
            {
                return false;
            }
            var aa = length + 1;
            for (var i = 0; i < (length - 1) / 2 + 1; i++)
            {
                if (arry[i] + arry[length - i - 1] != aa)
                {
                    return false;
                }
            }
            return true;
        }

少,

收获园豆:2
alone__ | 园豆:60 (初学一级) | 2013-06-28 16:26

忘了倒序的情况了 ,啊哈哈~

支持(0) 反对(0) alone__ | 园豆:60 (初学一级) | 2013-06-28 16:28
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册