锁定老帖子 主题:一个公司的Java面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-27
来个简单的
public boolean checkArray(int[] num){ //排序 省略 升降皆哥 for (int i = 0; i < num.length; i++) { try { if((num[i]!=num[i+1] && num[i]+1 !=num[i+1])){ if(num[i]!=num[i+1] && num[i]-1 !=num[i+1]){ return false; } } } catch (Exception e) { return true; } } return false; } |
|
返回顶楼 | |
发表时间:2010-05-27
1. 先循环一遍,找出最大和最小值
2. 如果最大和最小值的差 > 数组的长度,返回FALSE,做一个Hashmap,并用从最小值到最大值之间的数作为key,value是0. 3. 遍历数组,如果Hashmap包含这个,value + 1; 4. 遍历Hashmap,如果有value是0,则不连续。 |
|
返回顶楼 | |
发表时间:2010-05-27
最后修改:2010-05-27
LazyJack 写道 public static boolean isContinuousArray(int[] data){ if(data==null && data.length==0){ return false; } Set<Integer> set=new HashSet<Integer>(); for(int i=0;i<data.length;i++){ set.add(data[i]); } //O(n*log(n)) Arrays.sort(data); int small=data[0]; int big=data[data.length-1]; return (big-small+1)==set.size(); } |
|
返回顶楼 | |
发表时间:2010-05-27
wxq594808632 写道 哇你长得真高 写道 max-min+1 == length
..老大你又出现了. 很显然,此方法行不通... |
|
返回顶楼 | |
发表时间:2010-05-27
不放在set里,可以放在map里当做key,然后取map的keyset的大小和max-min+1比较是否相等
|
|
返回顶楼 | |
发表时间:2010-05-27
Integer min = null;
Integer max = null; int[] tmp = new int[]{4,9,6,5,7,7,8,4}; Map map = new HashMap(); for(int i=0;i<tmp.length;i++){ if(min==null||tmp[i]<min)min=tmp[i]; if(max==null||tmp[i]>max)max=tmp[i]; map.put(tmp[i], true); } System.out.println(min); System.out.println(max); System.out.println(map.keySet().size() == max-min+1); |
|
返回顶楼 | |
发表时间:2010-05-27
咋 都没注意,数组 里面的数是可以重复的呀:
[1,1,4,4,2,2,3,3] 这种数组是满足条件的 |
|
返回顶楼 | |
发表时间:2010-05-27
public boolean isCon(int[] array){
Arrays.sort(array); for(int i=0;i<array.length-1;i++){ if(array[i+1]-array[i]!=1){ return false; } } return true; } |
|
返回顶楼 | |
发表时间:2010-05-27
public static boolean isContinousArray(int[] intArr) { boolean flag = true; int len = intArr.length; int temp = intArr[0]; ArrayList<Integer> intList = new ArrayList<Integer>(); for (int i = 0; i < len; i++) { if (temp > intArr[i]) { temp = intArr[i]; } intList.add(intArr[i]); } for (int i = 0; i < len; i++) { flag = intList.contains(temp++); if (flag == false) { return flag; } } return flag; } 我这样写的,效率问题不知道怎么样~ |
|
返回顶楼 | |
发表时间:2010-05-27
唉,已经有人给出了比较好的答案(kimmking,qhfu),后面还会冒出来一堆错误的,讨论问题,最可悲的事情莫过于此:连正确的答案都不知道是正确的,还有什么好讨论的?
|
|
返回顶楼 | |