论坛首页 招聘求职论坛

一个公司的Java面试题

浏览 44449 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
作者 正文
   发表时间:2010-05-28   最后修改:2010-05-28
dkmilan 同学的算法,即使不考虑负数,数组里的数字稍微大点儿就顶不住了,如221,222,223
0 请登录后投票
   发表时间:2010-05-28  
FrankGui 写道
xgrass18 写道
先排序,然后前一个数等于后一个数或者前一个数等于后一个数+1

数字是允许重复的

前一个数等于后一个数,就解决重复问题了吧
0 请登录后投票
   发表时间:2010-05-28  
onno 写道
dkmilan 同学的算法,即使不考虑负数,数组里的数字稍微大点儿就顶不住了,如221,222,223

恩,你说的对。即使用double也不能彻底解决问题。似乎是不能用单层一次循环解决了。。
不过在O(n)的范围内还是可以的,需要两次循环。具体算法大家都给出N多了
0 请登录后投票
   发表时间:2010-05-28  
回复我楼下的,不用循环实现的方法就是:
放在map里当做key,然后取map的keyset的大小和max-min+1比较是否相等
0 请登录后投票
   发表时间:2010-05-28  
sovolee 写道
回复我楼下的,不用循环实现的方法就是:
放在map里当做key,然后取map的keyset的大小和max-min+1比较是否相等

这种解决方案,我在第三页就给出了,不知道后面怎么还有人再提,可见看贴人比较粗心。
0 请登录后投票
   发表时间:2010-05-28   最后修改:2010-05-28
负数不适用.

看看可以么, 循环一次.
public class TestArray {
	public static void main(String[] args) {
		int[] ar = new int[] { 1, 2, 3, 4, 6, 5 };

		int length = ar.length;
		double sum = 0;
		int min = Integer.MAX_VALUE;
		int max = 0;
		for (int a : ar) {
			sum += a;
			min = Math.min(min, a);
			max = Math.max(max, a);
		}
		System.out.println(sum == ((min + max) * ((double) length / 2)));
	}
}


又看了看, 有重复也不能用....再想想.
0 请登录后投票
   发表时间:2010-05-28  
这个题目··规定数组里的每个元素只能是0~9啊???
0 请登录后投票
   发表时间:2010-05-28   最后修改:2010-05-28
再来一段, 0和负数不行. 必须1以上的.
	public static void main(String[] args) {
		int[] ar = new int[] { 1, 2, 3, 4, 7, 6, 5 };

		int length = ar.length;
		int[] temp = new int[ar.length];

		for (int a : ar) {
			if (a > length) {
				System.out.println(false);
				break;
			}
			if (temp[a - 1] != 0) {
				System.out.println(false);
				break;
			}
			temp[a - 1] = a;
		}
		System.out.println(true);
}


又看了看, 还是缺少判断...
0 请登录后投票
   发表时间:2010-05-28  

public class ArraysTest {

	/**
	 * @param args
	 */
	

	public static void isLinkArray(Integer[] array){
		
		Set<Integer> arrHashSet=new HashSet(Arrays.asList(array));
		Integer max=Collections.max(arrHashSet);
		Integer min=Collections.min(arrHashSet);
		if((max.intValue()-min.intValue()+1)==arrHashSet.size()){
			System.out.println("连续的");
			
		}else{
			System.out.println("不连续");
		}
	}
	public static void main(String[] args) {
		isLinkArray(new Integer[]{0,2,3,-1,1,4,5,4,5,7,6,0,3});

		}
}
 0 负数 都可以··
0 请登录后投票
   发表时间:2010-05-28  
找出最大和最小
最大值 - 最小值 + 1 = 数组个数
就ok
0 请登录后投票
论坛首页 招聘求职版

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