剑指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("不是顺子"); } }