论坛首页 招聘求职论坛

一个公司的Java面试题

浏览 44454 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2010-05-27  
lkj107 写道
放入set
两端的值的差除以set的size

有漏洞
0 请登录后投票
   发表时间:2010-05-27   最后修改:2010-05-27
拿到这个数组的第一个数字,分别检测此值+1 和-1的结果是否存在于这个数组,如果不存在,那就不行,存在就行呗。当然 要遍历整个数组。额 不行,漏洞太大,不作数
0 请登录后投票
   发表时间:2010-05-27  
yesrqw 写道
创建一个数组String str = new String("0123456789");
将数字转换为字符串型,判断该字符串是否是str的子串,是则是连续数字,否则不是。


你这个方法 只适合 都是 个位数的 情况

如果: 【12,34,13,45,33,1,2,3,4】
你这个方法就 不行了
0 请登录后投票
   发表时间:2010-05-27  
哇你长得真高 写道
max-min+1 == length



如果数字有重复,此算法也不行
0 请登录后投票
   发表时间:2010-05-27  
public class ArrSortTest {

/**
* @param args
*/
public static void main(String[] args) {
int[] arr={1,3,8,4,5,6};
System.out.print(ArrSort(arr));
}
public static boolean ArrSort(int[] array){
String s1=Arrays.toString(array);
Arrays.sort(array);
String s2=Arrays.toString(array);
return s1.equals(s2);

}

}
0 请登录后投票
   发表时间:2010-05-27  
LazyJack 写道
package com.javaeye;


import java.util.HashSet;
import java.util.Set;

/**
 * 
 * Loop Once, No Sorting 
 *
 */
public class CheckNumbers
{
	private static final int[]	a	= { 1, 3, 4, 6, 2, 5 };
	private static final int[]	aa	= { 1, 3, 4, 5, 2, 5 };
	
	private static final int[]	b	= { 1, 2, 5, 4, 7 };
	private static final int[]	bb	= { 1, 2, 5, 4, 4 };
	
	
	public static void main(String[] args)
	{
		{
			// duplicate NOT allowed
			System.out.println("Duplicated is NOT allowed: ");
			boolean aIsContinue = duplicateNotAllowedCheck(a);
			System.out.println("a[] is "+aIsContinue);
			
			boolean aaIsContinue = duplicateNotAllowedCheck(aa);
			System.out.println("aa[] is "+aaIsContinue);
			
			
			boolean bIsContinue = duplicateNotAllowedCheck(b);
			System.out.println("b[] is "+bIsContinue);
			
			boolean bbIsContinue = duplicateNotAllowedCheck(bb);
			System.out.println("bb[] is "+bbIsContinue);

		}
		
		{
			// duplicate IS  allowed
			System.out.println("Duplicated IS allowed: ");
			
			boolean aIsContinue = duplicateAllowedCheck(a);
			System.out.println("a[] is "+aIsContinue);
			
			boolean aaIsContinue = duplicateAllowedCheck(aa);
			System.out.println("aa[] is "+aaIsContinue);
			
			
			boolean bIsContinue = duplicateAllowedCheck(b);
			System.out.println("b[] is "+bIsContinue);
			
			boolean bbIsContinue = duplicateAllowedCheck(bb);
			System.out.println("bb[] is "+bbIsContinue);
		}
	}

	/**
	 * Duplicated numbers is not allowed
	 * 
	 * @param b2
	 * @return
	 */
	private static boolean duplicateNotAllowedCheck(int[] list)
	{
		if(list == null || list.length == 0)
			return false;


		Set<Integer> set = new HashSet<Integer>();
		int min = list[0]; 
		int max = list[0];

		for(int i : list)
		{
			set.add(Integer.valueOf(i));

			if( i<min )
				min = i;
			else if( i>max )
				max = i;
			
		}

		return max-min+1 == a.length ;
	}

	/**
	 * Duplicated numbers is allowed
	 * 
	 * @param b2
	 * @return
	 */
	private static boolean duplicateAllowedCheck(int[] list)
	{
		if(list == null || list.length == 0)
			return false;


		Set<Integer> set = new HashSet<Integer>();
		int min = list[0]; 
		int max = list[0];

		for(int i : list)
		{
			set.add(Integer.valueOf(i));

			if( i<min )
				min = i;
			else if( i>max )
				max = i;
			
		}

		return max-min+1 == set.size() ;
	}	
	
}

这个算法应该不错吧!各位有什么意见?

 

 

0 请登录后投票
   发表时间:2010-05-27  
快速排序  一边排序 一边比较 不符合直接返回false 在排序的临界值再加点比较。
0 请登录后投票
   发表时间:2010-05-27   最后修改:2010-05-27
首先我对题目的理解是数组[1,2,3,4,5]是可以组成连续数字的,数组[1,1,2,3,4,5]是不能组成连续的情况:
1.可以在排序的时候,就保证数值不重复。如果重复
2.下来就是拿最大减去最小+1是否等于这个数组的长度。
其次如果说数字重复的也算的话,
1.在排序的过程当中,组成新的数组,新数组中不包含重复值。
2。同上的2。
0 请登录后投票
   发表时间:2010-05-27  
1、先使用Arrays.sort()进行排序,时间复杂度是n*log(n)
2、通过对排好的序进行判断
public boolean isContinuous(int[] numbers){
	boolean result=false;
	Arrays.sort(numbers);//排序
	int counts=numbers.length-1;
	int first=numbers[0];//第一个
	int last=numbers[counts];//最后一个
	int discrepancy=last-first;
	if(discrepancy==counts){
		for(int i=0;i<numbers.length/2;i++){
			if((numbers[i]+1==numbers[i+1])&& numbers[counts]==numbers[--counts]+1){
				result=true;
			}
			else{
				result=false;
				break;
			}
		}
	}else{
		result=false;
	}
	return result;
}

0 请登录后投票
   发表时间:2010-05-27  
不用排序把  第一步 都放在set里 去重复  然后找到最小值n  求出数字个数m  遍历求所有数的和c 看c是否等于n*m+m-1 相等则符合条件 不等则不符合条件
0 请登录后投票
论坛首页 招聘求职版

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