锁定老帖子 主题:一个公司的Java面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-26
最后修改:2010-05-26
呵呵,我采用笨办法:先用一个循环找出数字中的最大值和最小值,然后从最小到最大值在数组中循环查找对应数字,只要有一个数没有找到,就返回false,如果都找到了,就返回true. public boolean isContinousArray(int[] intArr) { if(intArr==null) return false; if(intArr.length<2) return true; int maxInt=intArr[0],minInt=intArr[0]; for(int i:intArr) { System.out.println(i); if(i>maxInt) maxInt=i; if(i<minInt) minInt=i; } for(int value=minInt;value<=maxInt;value++) { boolean found=false; for(int j:intArr) { if(j==value) { found=true; break; } } if(!found) return false; } return true; } 是不是还有更好的算法? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-05-26
先排序,然后前一个数等于后一个数或者前一个数等于后一个数+1
|
|
返回顶楼 | |
发表时间:2010-05-26
先一次循环数组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-26
最后修改:2010-05-26
也可以只取一个最小值。然后如此操作。
|
|
返回顶楼 | |
发表时间:2010-05-26
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。
我从这开始再将数组放入set,看set的size和数组的length 再把数组的和算出来。。。。。 |
|
返回顶楼 | |
发表时间:2010-05-26
创建一个数组String str = new String("0123456789");
将数字转换为字符串型,判断该字符串是否是str的子串,是则是连续数字,否则不是。 |
|
返回顶楼 | |
发表时间:2010-05-26
max-min+1 == length
|
|
返回顶楼 | |
发表时间:2010-05-26
第一排序
第二相加,相乘得出结果 也许效率高哦 |
|
返回顶楼 | |
发表时间:2010-05-26
xgrass18 写道 先排序,然后前一个数等于后一个数或者前一个数等于后一个数+1
数字是允许重复的 |
|
返回顶楼 | |
发表时间:2010-05-26
Checkmate 写道
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。
我从这开始再将数组放入set,看set的size和数组的length 再把数组的和算出来。。。。。 一定要注意:数字允许重复 |
|
返回顶楼 | |