如题,var a = [1,2,3,4]; var b = [1,2,4];
判断数组a为true,数组b为false
是否为从1开始的连续数字
可以抓取数组中最小和最大的数,例如最小为1,最大为100, 然后看数组中的数的和跟从1加到100的值是否相等,若相等则为true,否则为false
你这个实现思路肯定不可行,就按照你说的,如果数组中100个数,最小1,最大是100,但是其中有排列1,3,2,4,....其余是顺序排列的,相加合肯定也相等咯,但实事是并不顺序排列。
把握住连续数字
@潇洒一回: 哦,没注意看“连续数字”。
//判断数组是否是从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; }
根据楼主给的信息,时间复杂度应该为O(n),一楼靠谱。
一楼也不靠谱
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);
}
连续数组的特点:
下述算法没有排除[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; }
不错
(前提数组存的是正数)
1. 数组排序 小-->大
2. 1)数组个数是否为 等于 最大数减去最小数的结果加1
否--》false
是-->goto 下一步
2) 数组最小的数字连续求和加到数组最大的数 为N1(N1是假设是连续递增为1的和)
继续求和数组实际元素的相加之和为 N2
N1=N2 ----> 连续
N1!=N2 ----》 return false
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; }
少,
忘了倒序的情况了 ,啊哈哈~