扑克牌顺子

扑克牌顺子

http://www.nowcoder.com/questionTerminal/762836f4d43d43ca9deb273b3de8e1f4

剑指offer解法:

1. 排序:O(n)复杂度
2. 计算0的个数
3. 排序后数组中相邻数字之间的空缺总数,numBlank,
   if (numBlank <= numZero) true
   else false
4. 判断相邻两个数是否相等(除了0),相等是对子,不可能是顺子,
public class Solution {
    public boolean isContinuous(int[] numbers) {
        if (numbers == null || numbers.length < 1) {
            return false;
        }
        qsort(numbers);
        int len = numbers.length;
        int numZero = 0;
        int numBlank = 0;
        for (int i = 0; i < len; i++) {
            if (numbers[i] == 0) {
                numZero++;
            }
        }
        int small = numZero;
        int big = small + 1;
        while (big < len) {
            if (numbers[small] == numbers[big]) {
                return false;
            }
            numBlank += numbers[big] - numbers[small] - 1;
            small = big;
            big++;
        }
        return numBlank > numZero ? false : true;
    }
    /**
     * 使用哈希表实现 todo : O(n)的排序,常量空间复杂度
     * @param numbers
     */
    private void qsort(int[] numbers) {
        int[] map = new int[14];
        for (int i = 0; i < numbers.length; i++) {
            map[numbers[i]]++;
        }
        int j = 0;
        for (int i = 0; i < 14; i++) {
            while (map[i] > 0) {
               numbers[j++] = i;
               map[i]--;
            }
        }
    }
}
全部评论

相关推荐

2024-12-23 06:50
门头沟学院 Java
给点吧求求了:3点发的帖子,害怕😰
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务