发表时间:2010-05-26
class findValue { static main(args){ int[] a= [1,3,5,2,4,6]; int[] b= [1,5,6,2,6,3]; a=Arrays.asList(a).sort().toArray(); b=Arrays.asList(b).sort().toArray(); check(a); check(b); } static check(int[] a){ if(a[a.length-1]-a[0]!=a.length-1){ println('该数组不连续:'+a); return; } for(i in 0..a.length-1){ if(i!=(a.length-1-(a[a.length-1]-a[i]))){ println('该数组不连续:'+a); break; } } } } 该数组不连续:[1, 2, 3, 5, 6, 6] |
|
发表时间:2010-05-26
FrankGui 写道 xgrass18 写道 先排序,然后前一个数等于后一个数或者前一个数小于后一个数+1
数字是允许重复的 字打错了 先排序,然后前一个数等于后一个数 或者 前一个数+1等于后一个数 |
|
发表时间:2010-05-26
if(arrays==null || arrays.length==0) return false; int min=arrays[0]; int max=arrays[0]; Set<Integer> tempSet=new HashSet<Integer>(); for(int i=0;i<arrays.length;i++){ tempSet.add(arrays[i]); if(arrays[i]<min){ min=arrays[i]; }else if(arrays[i]>max){ max=arrays[i]; } } int length=max-min+1; return length==tempSet.size(); |
|
发表时间:2010-05-26
重复算通过还是不通过呢?
|
|
发表时间:2010-05-26
xgrass18 写道 FrankGui 写道 xgrass18 写道 先排序,然后前一个数等于后一个数或者前一个数小于后一个数+1
数字是允许重复的 字打错了 先排序,然后前一个数等于后一个数 或者 前一个数+1等于后一个数 class findValue { static main(args){ int[] a= [1,3,3,2,4,6]; int[] b= [1,5,4,2,3,3]; a=Arrays.asList(a).sort().toArray(); b=Arrays.asList(b).sort().toArray(); check(a); check(b); } static check(int[] a){ for(i in 0..a.length-2){ if((a[i+1]-a[i]==1)||a[i+1]==a[i]){ }else{ println('该数组不连续:'+a); break; } } } } 该数组不连续:[1, 2, 3, 3, 4, 6] |
|
发表时间:2010-05-26
哇你长得真高 写道 max-min+1 == length
..老大你又出现了. |
|
发表时间:2010-05-26
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。 //找m、n if(array.length<(m-n+1)) return false; if(bucket[i]==0) return false; return true;
ps:应该不用排序……
|
|
发表时间:2010-05-26
用到这些知识只要用于什么开发什么的,好像web开发没有用到这些知识啊??
|
|
发表时间:2010-05-26
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-26
sorry, duplicateNotAllowedCheck() should not use Set<>
|