剑指offer-第六章面试中的各项能力(扑克牌中的顺子)

//扑克牌的顺子
//题目:在一个扑克牌中随机的抽5张牌,看是不是顺子。大小王为0,A为1,J为11,Q为12,K为13.其他数字为自己本身。
//思路:大小王可以代表任意一个数字,因此我们在看是不是顺子之前要先对数字进行排序,数出0的个数。
//如果相连的两个数字之间相差的总数是超出0的个数,那么就不是顺子,否则就是
public class IsContinue {
     public void bubbleSort(int[] a){
         if(a==null)
             return;
         //要进行n-1趟排序
         for(int i=0;i<a.length;i++){
             for(int j=0;j<a.length-i-1;j++){
                 if(a[j]>a[j+1])
                     swrap(a,j,j+1);
             }
         }
     }

    public void swrap(int[] a, int j, int i) {
        int temp=a[i];
        a[i]=a[j];
        a[j]=temp;
    }
    public boolean isContinues(int[] a){
        bubbleSort(a);
        int count=0;
        for(int i=0;i<a.length;i++){
            if(a[i]==0)
                count++;
            else
                break;
        }
        int small=count;//指向非零的数中的较小的数
        int big=count+1;//指向较大的数
        int interval=0;//较大的数减去相连的较小的数再减1后剩下的数。
        for(;big<a.length;big++){
            if(a[small]==a[big])//有对子,就不是顺子。
                return false;
            interval+=a[big]-a[small]-1;
            small=big;
        }
        if(interval>count)
            return false;
        return true;
    }
    public static void main(String[] args){
        int[] a={0,8,5,6,3};
        IsContinue isContinue=new IsContinue();
        isContinue.bubbleSort(a);
        for(int i:a)
            System.out.print(i+" ");
        System.out.println();
        if(isContinue.isContinues(a))
            System.out.println("是顺子");
        else
            System.out.println("不是顺子");
        
    }
}

 

posted @ 2015-08-31 14:32  lisahappy  阅读(282)  评论(0编辑  收藏  举报