其他分享
首页 > 其他分享> > 剑指Offer面试题61:扑克牌中的顺子

剑指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);
        }
    }

答案的代码,思路更直接,通过最大牌减最小牌的值来判断

https://leetcode-cn.com/problems/bu-ke-pai-zhong-de-shun-zi-lcof/solution/mian-shi-ti-61-bu-ke-pai-zhong-de-shun-zi-ji-he-se/

标签:count,面试题,nums,int,reduce,61,num,顺子
来源: https://blog.csdn.net/qq_40473204/article/details/115371424