阅读 44462 次
发表时间: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;
//创建数组
for(int i=0;i<bucket.length;i++)

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<>
Global site tag (gtag.js) - Google Analytics