阅读 44460 次
发表时间:2010-05-27
           public static void main(String[] args) {
int[] array = {12,14,15,13,16,17,12};
Arrays.sort(array);
for(int i = 0 ;i<array.length-1;i++){ 
if(array[i] != array[i+1] -1){
if(array[i] == array[i+1]){
continue;
}else {
System.out.println("数组不连续!");
return;
}
}
}
System.out.println("数组连续!");
}

可以试试这个!
发表时间:2010-05-27
FrankGui 写道
xgrass18 写道
先排序,然后前一个数等于后一个数或者前一个数等于后一个数+1

数字是允许重复的



人家前一个数等于后一个数,不就是允许重复了嘛
发表时间:2010-05-27
先位图排序,然后遍历位图。
发表时间:2010-05-27
被误导了,HashSet本身是不会有重复出现的
发表时间:2010-05-27
kimmking 写道
先一次循环数组array,拿到最大值m和最小值n。
然后看array的长度是不是m-n+1,不是就return false。
然后创建一个新数组bucket[m-n+1],
对于数组array中的每一个数x,令bucket[x-n]=1,
定义y =1
最后循环一遍bucket,y = y&bucket[i];如果y=0,return false
否则,return true。

有点麻烦吧,直接先排下序,后面的步骤就好操作了
发表时间:2010-05-27
看贴子第三页我就给出了较好的解决方案,不知道怎么这么多人后面还给出效率低,而且问题一堆的答案。
真是不解!
发表时间:2010-05-27
xgrass18 写道
先排序,然后前一个数等于后一个数或者前一个数等于后一个数+1

支持这个
发表时间:2010-05-27
位处理比较快
声明一个int值sum做记录,初始化为0
每读到一个数n 则将int的对应位标1, 同时记录数组最大最小置,走完之后如果是连续数组,则sum的二进制表示必为max-min个1后面跟着min个0。因此如2^(max+1)=sum+2^min则为连续,否则不连续

    public static boolean isContinueArr(int[] dataArr){

        int max=dataArr[0];
        int min=max;
        int sum=0;
        for (int i=0;i<dataArr.length;i++){
            if (dataArr[i]>max){
                max=dataArr[i];
            }
            if (dataArr[i]<min){
                min=dataArr[i];
            }
            sum=sum|(int)Math.pow(2,dataArr[i]);//对应位置标为1
        }
        return sum+(int)Math.pow(2,min)==(int)Math.pow(2,max+1);
    }
发表时间:2010-05-27
王者之剑 写道
唉,已经有人给出了比较好的答案(kimmking,qhfu),后面还会冒出来一堆错误的,讨论问题,最可悲的事情莫过于此:连正确的答案都不知道是正确的,还有什么好讨论的?

你是可悲什么?
没有更好的答案?
还是有了正确答案还要花时间研究?

发表时间:2010-05-27
public static void main(String args[]){
int shuZu[] = new int[]{4,1,1,3,5,7};
Arrays.sort(shuZu);
int number = shuZu.length;
for(int i=0; i<number; i++){
if(i+1<number)
if(shuZu[i]+1 != shuZu[i+1]){
System.out.println("不能组合成连续数字");
break;
}
}
}
Global site tag (gtag.js) - Google Analytics