为了账号安全,请及时绑定邮箱和手机立即绑定

计算一组数字是否顺子问题

计算一组数字是否顺子问题

繁星点点滴滴 2019-01-19 12:57:03
规则: 比如1,2,3,4,5 / 4,5,1,2,3/ 2,3,4,5,1 /5,1,2,3 ,这里最大值是5,最小值是1,逢5就到1了,满足这样条件就算顺子
查看完整描述

3 回答

?
湖上湖

TA贡献2003条经验 获得超2个赞

重新编辑了:

public static boolean isStraight(int[] num, int min, int max) {
    Arrays.sort(num);
    int i;
    for (i = 1; i < num.length; i++) {
        if (num[i] - num[i - 1] != 1) {
            break;
        }
    }
    if (i == num.length) {
        return true;
    }
    for (i = i + 1; i < num.length; i++) {
        if (num[i] - num[i - 1] != 1) {
            return false;
        }
    }
    if (num[num.length - 1] == max && num[0] == min) {
        return true;
    }
    return false;
}

public static void main(String[] args) {
    System.out.println(isStraight(new int[]{1,2,3,5},1,5));
}
查看完整回答
反对 回复 2019-03-01
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

arr.sort((a,b)=>a-b);
arr.every((t,i)=>{
    return i==0?true:t-arr[i-1]==1?true:false
})

更新

//参数,数组范围最小值,范围最大值
var mtest = function(min,max){
    //这里min,max代表顺子的最大值与最小值,确定一个边界,如1-5
    return arr=>{
        arr.sort((a,b)=>a-b);
        //如果数组最大值超过设定的最大值max,返回错误提醒
        if(arr[arr.length-1]>max){
            alert("数组元素最大值超过预期,错误");
            return false;
        }
        var b = arr.every((m,n)=>n==0?true:m-arr[n-1]==1?true:false);
        if(b)return true;//如果传进来的数组本身是[2,3,4]这样的连续递增的数据,返回true
        //走到这里,索命传进来的数据不是连续的,那么可以判断没有的数据是不是连续的
        //把1-5这几个元素看成一个圆环,取环上一段连续的数据,那么剩下的数据也必然是连续的
        var arr1 = [];
        //从[1,2,3,4,5]中检测[1,5,2]少了哪些数据
        for(var i=min;i<max+1;i++){
            arr.indexOf(i)<0 && arr1.push(i)
        }
        //arr1得到[3,4],然后检测arr1是不是连续的
        return arr1.every((t,i)=>i==0?true:t-arr1[i-1]==1?true:false)
    }    
}(1,5);

mtest([1,5,2])
mtest([1,5,2,6])
mtest([3,2,4])
查看完整回答
反对 回复 2019-03-01
  • 3 回答
  • 0 关注
  • 733 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信