牛客:剑指offer:扑克牌顺子 (Java)

来源:互联网 发布:mysql 官网下载旧版本 编辑:程序博客网 时间:2024/06/05 18:54

题目描述:

解析:

随机抽的5张牌可以看成5个数字组成的数组,大、小王是特殊的数字,不妨定义为0.接下来只要判断5个数字是不是连续的。最直观的方法是排序,然后用0去补满数组中的空缺。如果排序后的数组不是连续的,即相邻的两个数字都相隔若干个数字,但只要我们有足够的0可以补满这两个数字的空缺,这个数组实际上还是连续的。除此之外,还要注意非0数字重复出现,则该数组不是连续的

代码:先对数组排序,然后统计0的个数,顺便统计不连续的数字之间的差值,最后如果差值小于等于0的个数则是连续的,否则就不是连续的。

public class Solution {    public boolean isContinuous(int [] numbers) {if(numbers == null || numbers.length != 5)            return false;        sort(numbers);        int zeroNum = 0;        int diff = 0;        for(int i = 0; i < 4; i++){            if(numbers[i] == 0)                zeroNum++;            else{                if(numbers[i] == numbers[i+1]){                    return false;                }                diff += (numbers[i+1] - numbers[i] - 1);            }        }        if(zeroNum >= diff)          return true;        return false;    }    public void sort(int[] arr){        int len = arr.length;        for(int i = 0; i < len - 1; i++){            for(int j = 0; j < len - 1 - i; j++){                if(arr[j] > arr[j+1]){                    int tmp = arr[j];                    arr[j] = arr[j+1];                    arr[j+1] = tmp;                }            }        }    }}


0 0
原创粉丝点击