题目链接:https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4?tpId=13&&tqId=11198&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

  思路:对数组进行排序,然后记录下 0 的个数,遍历后面的数组,如果数字是不连续的计算我们需要在中间补齐多少个 0,如果能够补齐则继续,不能则说明不能成为顺子。

import java.util.*;

public class Solution {
    public boolean isContinuous(int [] numbers) {
        if(numbers == null || numbers.length <= 0) return false;//需要注意为[]的情况
        int n = numbers.length, cnt = 0;
        boolean flag = true;
        Arrays.sort(numbers);
        for(int i = 0; i < n; ++ i) {
            if(numbers[i] == 0) ++ cnt;
        }
        int val = 0;
        for(int i = 0; i < n; ++ i) {
            if(numbers[i] == 0) continue;
            if(val == 0) {
                val ++;
            } else {
                int cnt0 = numbers[i] - numbers[i - 1] - 1;
                if(cnt0 >= 0 && cnt0 <= cnt) cnt -= cnt0;
                else {
                    flag = false;
                    break;
                }
            }
        }
        return flag;
    }
}