剑指Offer面试题61:扑克牌中的顺子
作者:互联网
这道题,我的思路是先排序,然后再对非零元素做差,判断是否是顺子,但是我觉得,涉及到排序是不是复杂度高了,看到答案,也是这个思路。
其中,有一些细节需要注意,一个是两个相同非零数字,要设置为false,如果0的个数大于探测到需要填充的数的个数,那么是true,因为0可以放在两边
我的代码
public boolean isStraight(int[] nums) {
qsort_my(nums,0,nums.length - 1);
int reduce = 0;
int num_0 = 0;
for(int count = nums.length-1;count>0;count--){
if(nums[count]!=0&&nums[count-1]!=0){
reduce+=nums[count]- nums[count-1]-1;
if(nums[count] == nums[count-1]){
return false;
}
}else if(nums[count]==0){
num_0++;
}
}
if(nums[0]==0){
num_0++;
}
return reduce<=num_0;
}
public int partition(int[] nums,int start,int end){
int key = nums[start];
int i = start;
int j = end;
while(i<j){
while(key <= nums[j] && i<j){
j--;
}
while(key >= nums[i] && i<j){
i++;
}
int temp = nums[j];
nums[j] = nums[i];
nums[i] = temp;
}
nums[start] = nums[i];
nums[i] = key;
return j;
}
public void qsort_my(int[] nums,int start,int end){
if(start<end){
int mid = partition(nums,start,end);
qsort_my(nums,start,mid-1);
qsort_my(nums,mid+1,end);
}
}
答案的代码,思路更直接,通过最大牌减最小牌的值来判断
标签:count,面试题,nums,int,reduce,61,num,顺子 来源: https://blog.csdn.net/qq_40473204/article/details/115371424