论坛首页 招聘求职论坛

一个公司的Java面试题

浏览 44446 次
精华帖 (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;
}
0 请登录后投票
   发表时间:2010-05-27  
1. 先循环一遍,找出最大和最小值
2. 如果最大和最小值的差 > 数组的长度,返回FALSE,做一个Hashmap,并用从最小值到最大值之间的数作为key,value是0.
3. 遍历数组,如果Hashmap包含这个,value + 1;
4. 遍历Hashmap,如果有value是0,则不连续。
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();
}


0 请登录后投票
   发表时间:2010-05-27  
wxq594808632 写道
哇你长得真高 写道
max-min+1 == length


..老大你又出现了.


很显然,此方法行不通...
0 请登录后投票
   发表时间:2010-05-27  
不放在set里,可以放在map里当做key,然后取map的keyset的大小和max-min+1比较是否相等
0 请登录后投票
   发表时间: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);
0 请登录后投票
   发表时间:2010-05-27  
咋 都没注意,数组 里面的数是可以重复的呀:
[1,1,4,4,2,2,3,3] 这种数组是满足条件的
0 请登录后投票
   发表时间: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;
}
0 请登录后投票
   发表时间: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;
	}


我这样写的,效率问题不知道怎么样~
0 请登录后投票
   发表时间:2010-05-27  
唉,已经有人给出了比较好的答案(kimmking,qhfu),后面还会冒出来一堆错误的,讨论问题,最可悲的事情莫过于此:连正确的答案都不知道是正确的,还有什么好讨论的?
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics