首页 > 其他 > 详细

JZ45 扑克牌顺子

时间:2021-09-01 22:11:06      阅读:12      评论:0      收藏:0      [点我收藏+]

原题链接


描述

现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
有如下规则:

现在有2副扑克牌,从扑克牌中随机五张扑克牌,我们需要来判断一下是不是顺子。
有如下规则:

  1. A为1,J为11,Q为12,K为13,A不能视为14
  2. 大、小王为 0,0可以看作任意牌
  3. 如果给出的五张牌能组成顺子(即这五张牌是连续的)就输出true,否则就输出false。

示例

输入:[6,0,2,0,4]
返回值:true

思路一

快排,统计出 0 的个数。然后从数组中 0 以后的元素检测最大点数差是不是大于等于5,如果是,那就不可能组成顺子,ret false;如果不是,检测是不是有相同的值,如果是,ret false;都不是的话,ret true。


解答

public class Solution {
    public void qSort(int[] arr, int low, int high) {
        if (low > high) return;
        int i = low, j = high, tmp = arr[low];
        while (i < j) {
            while (i < j && arr[j] >= tmp) j--;
            while (i < j && arr[i] <= tmp) i++;

            if (i < j) {
                int a = arr[i];
                arr[i] = arr[j];
                arr[j] = a;
            }
        }
        arr[low] = arr[i];
        arr[i] = tmp;

        qSort(arr, low, i - 1);
        qSort(arr, i + 1, high);
    }

    public boolean IsContinuous(int[] numbers) {
        qSort(numbers, 0, numbers.length - 1);
                int len = numbers.length;

        int sum = 0;//统计0的个数
        // 有n个零,牌的点数的最大差就是n
        for (int a : numbers) {
            if (a != 0) break;
            else ++sum;
        }
        if (numbers[len - 1] - numbers[sum] >= 5) return false;
        for (int i = sum; i < len - 1; i++) {
            if (numbers[i] == numbers[i + 1]) return false;
        }
        return true;
    }
}

精简

// 同样的思路,大佬的代码很简洁
import java.util.Arrays;

public class Solution {

    public boolean IsContinuous(int[] numbers) {
        Arrays.sort(numbers);

        int cnt = 0;//统计0的个数
        for (int i = 0; i < 4; i++) {
            if (numbers[i] == 0) cnt++;
            else if (numbers[i] == numbers[i + 1]) return false;
        }

        return numbers[4] - numbers[cnt] <5;
    }

}

思路二

主要就是判重以及确定最大值最小值差是不是小于5。判重可以通过 HashSet 来实现,在判重的过程中如果重复ret false,并且随时更新最大值、最小值,最后判断 max 和 min 的差。时间复杂度是 O(n),低于思路一O(nlogn),不过数组长度规定是5,所以区别不大。

JZ45 扑克牌顺子

原文:https://www.cnblogs.com/klaus08/p/15208303.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!