锁定老帖子 主题:一个公司的Java面试题
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (3)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-27
lkj107 写道 放入set
两端的值的差除以set的size 有漏洞 |
|
返回顶楼 | |
发表时间:2010-05-27
最后修改:2010-05-27
拿到这个数组的第一个数字,分别检测此值+1 和-1的结果是否存在于这个数组,如果不存在,那就不行,存在就行呗。当然 要遍历整个数组。额 不行,漏洞太大,不作数
|
|
返回顶楼 | |
发表时间:2010-05-27
yesrqw 写道 创建一个数组String str = new String("0123456789");
将数字转换为字符串型,判断该字符串是否是str的子串,是则是连续数字,否则不是。 你这个方法 只适合 都是 个位数的 情况 如果: 【12,34,13,45,33,1,2,3,4】 你这个方法就 不行了 |
|
返回顶楼 | |
发表时间:2010-05-27
哇你长得真高 写道 max-min+1 == length
如果数字有重复,此算法也不行 |
|
返回顶楼 | |
发表时间: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); } } |
|
返回顶楼 | |
发表时间: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() ; } } 这个算法应该不错吧!各位有什么意见?
|
|
返回顶楼 | |
发表时间:2010-05-27
快速排序 一边排序 一边比较 不符合直接返回false 在排序的临界值再加点比较。
|
|
返回顶楼 | |
发表时间:2010-05-27
最后修改:2010-05-27
首先我对题目的理解是数组[1,2,3,4,5]是可以组成连续数字的,数组[1,1,2,3,4,5]是不能组成连续的情况:
1.可以在排序的时候,就保证数值不重复。如果重复 2.下来就是拿最大减去最小+1是否等于这个数组的长度。 其次如果说数字重复的也算的话, 1.在排序的过程当中,组成新的数组,新数组中不包含重复值。 2。同上的2。 |
|
返回顶楼 | |
发表时间: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; } |
|
返回顶楼 | |
发表时间:2010-05-27
不用排序把 第一步 都放在set里 去重复 然后找到最小值n 求出数字个数m 遍历求所有数的和c 看c是否等于n*m+m-1 相等则符合条件 不等则不符合条件
|
|
返回顶楼 | |