锁定老帖子 主题:一个公司的Java面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-28
最后修改:2010-05-28
dkmilan 同学的算法,即使不考虑负数,数组里的数字稍微大点儿就顶不住了,如221,222,223
|
|
返回顶楼 | |
发表时间:2010-05-28
FrankGui 写道 xgrass18 写道 先排序,然后前一个数等于后一个数或者前一个数等于后一个数+1
数字是允许重复的 前一个数等于后一个数,就解决重复问题了吧 |
|
返回顶楼 | |
发表时间:2010-05-28
onno 写道 dkmilan 同学的算法,即使不考虑负数,数组里的数字稍微大点儿就顶不住了,如221,222,223
恩,你说的对。即使用double也不能彻底解决问题。似乎是不能用单层一次循环解决了。。 不过在O(n)的范围内还是可以的,需要两次循环。具体算法大家都给出N多了 |
|
返回顶楼 | |
发表时间:2010-05-28
回复我楼下的,不用循环实现的方法就是:
放在map里当做key,然后取map的keyset的大小和max-min+1比较是否相等 |
|
返回顶楼 | |
发表时间:2010-05-28
sovolee 写道 回复我楼下的,不用循环实现的方法就是:
放在map里当做key,然后取map的keyset的大小和max-min+1比较是否相等 这种解决方案,我在第三页就给出了,不知道后面怎么还有人再提,可见看贴人比较粗心。 |
|
返回顶楼 | |
发表时间: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))); } } 又看了看, 有重复也不能用....再想想. |
|
返回顶楼 | |
发表时间:2010-05-28
这个题目··规定数组里的每个元素只能是0~9啊???
|
|
返回顶楼 | |
发表时间: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); } 又看了看, 还是缺少判断... |
|
返回顶楼 | |
发表时间: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 负数 都可以·· |
|
返回顶楼 | |
发表时间:2010-05-28
找出最大和最小
最大值 - 最小值 + 1 = 数组个数 就ok |
|
返回顶楼 | |