论坛首页 招聘求职论坛

一个公司的Java面试题

浏览 44443 次
精华帖 (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;
}
0 请登录后投票
   发表时间:2011-01-14  
排序的同时 在加个判断大小就行了
0 请登录后投票
   发表时间: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;
}

正解
0 请登录后投票
   发表时间: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遍循环搞定
0 请登录后投票
   发表时间:2011-03-05   最后修改:2011-03-05
对oriArr一次遍历,取min,max,sum
return 计算min到max之和==sum
避免了中间数组,排序,使用集合类估计得不了分吧
0 请登录后投票
   发表时间:2011-03-08  
有点儿意思哈
0 请登录后投票
   发表时间:2011-03-29  
Arrays.sort()排序数字
循环,数组后位减去前位,只要满足大于1则不能组成连续数字。
0 请登录后投票
   发表时间: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

0 请登录后投票
   发表时间: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;
	}
}

0 请登录后投票
   发表时间:2011-05-25  
mwei 写道
对oriArr一次遍历,取min,max,sum
return 计算min到max之和==sum
避免了中间数组,排序,使用集合类估计得不了分吧

这个方法比较帅
0 请登录后投票
论坛首页 招聘求职版

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