锁定老帖子 主题:一个公司的Java面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2010-12-10
public static boolean isConsecutive(Integer[] a) {
if (a != null && a.length >= 1) { Set<Integer> set = new HashSet<Integer>(); set.addAll(Arrays.asList(a)); if (Collections.max(set) - Collections.min(set) + 1 == set.size()) { return true; } } return false; } |
|
返回顶楼 | |
发表时间:2011-01-14
排序的同时 在加个判断大小就行了
|
|
返回顶楼 | |
发表时间:2011-03-04
wgsh2004 写道 public static boolean isConsecutive(Integer[] a) {
if (a != null && a.length >= 1) { Set<Integer> set = new HashSet<Integer>(); set.addAll(Arrays.asList(a)); if (Collections.max(set) - Collections.min(set) + 1 == set.size()) { return true; } } return false; } 正解 |
|
返回顶楼 | |
发表时间:2011-03-04
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。 可以初始化和给出数组相同大小的数组A,以第一个数作为参照标准,采用增量标志法在数组A中置位相应的元素(越界或者重复置位返回false,最后返回true)。2遍循环搞定 |
|
返回顶楼 | |
发表时间:2011-03-05
最后修改:2011-03-05
对oriArr一次遍历,取min,max,sum
return 计算min到max之和==sum 避免了中间数组,排序,使用集合类估计得不了分吧 |
|
返回顶楼 | |
发表时间:2011-03-08
有点儿意思哈
|
|
返回顶楼 | |
发表时间:2011-03-29
Arrays.sort()排序数字
循环,数组后位减去前位,只要满足大于1则不能组成连续数字。 |
|
返回顶楼 | |
发表时间:2011-03-29
最后修改:2011-03-29
我的思路:先排序,后遍历
不知道最优的算法是什么 import java.util.Arrays; public class Driver{ public static void main(String[]args){ int testArray1[] = { 1 , 2 , 3 , 4 , 5 , 8}; System.out.print("testArray1 "); new IsContinousArray().isContinous(testArray1); int testArray2[] = { 6 , 5 ,3 ,1 ,2 ,4 ,7 ,0 ,8 }; System.out.print("testArray2 "); new IsContinousArray().isContinous(testArray2); } } class IsContinousArray { public void isContinous(int []array){ if(array.length == 0){ //空数组 System.out.println("empty array"); return; }else if(array.length == 1){ // 数组长度为1 System.out.println("continous array"); return; }else Arrays.sort(array); // 升序 int i = 1; while( i < array.length){ if( array[i-1] == array[i] || array[i-1] == array[i] - 1){ //重复或者前面比后面的小1 i++; }else{ System.out.println("is not a continous array"); return; } } System.out.println("is a continous array"); } } 输出: testArray1 is not a continous array testArray2 is a continous array |
|
返回顶楼 | |
发表时间:2011-05-19
最后修改:2011-05-19
find intMin and intMax,
if array.length < intMax - intMin +1 return false; new int array[intMax - intMin +1] for 0 --> valueArray.length newArray[valueArray[index] - intMin] = 1 for 0 --> newArray.length if newArray[index] == 0 return false; return ture; import java.util.Random; public class Ss { /** * @param args */ public static void main(String[] args) { Random ra = new Random(); int intValues[] = new int[44710089/10]; for (int i = 0; i < intValues.length; i++) { intValues[i] = ra.nextInt(300000) - 100000; // intValues[i] = (int)(Math.random()*80000) - 40000; } long startTime = System.currentTimeMillis(); System.out.println("intValues[] " + (isLinkArray(intValues) ? "is " : "is not ") + "linked !"); long endTime = System.currentTimeMillis(); System.out.println("Spend " + (endTime - startTime) +" ms !"); } public static boolean isLinkArray(int[] intValues) { int min, max; min = max = intValues[0]; for (int i = 1; i < intValues.length; i++) { if (intValues[i] < min) { min = intValues[i]; } else if (intValues[i] > max) { max = intValues[i]; } } System.out.println("min = " + min + "; max = " + max); if (intValues.length < max - min + 1) { return false; } int tempArray[] = new int[max - min + 1]; for (int i = 0; i < intValues.length; i++) { tempArray[intValues[i] - min] = 1; } for (int i = 0; i < tempArray.length; i++) { if (tempArray[i] == 0) { return false; } } return true; } } |
|
返回顶楼 | |
发表时间:2011-05-25
mwei 写道 对oriArr一次遍历,取min,max,sum
return 计算min到max之和==sum 避免了中间数组,排序,使用集合类估计得不了分吧 这个方法比较帅 |
|
返回顶楼 | |