发表时间: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; } } } |