牛牛的和平年代---牛客网

题目描述

题目背景:

数轴世界建立之初,还没有任何的生机。直到有一天,在数轴的整点上,慢慢诞生了一个一个新兴的文明。如果两个文明相邻,也就是在他们之间不存在其他的整点,他们就会慢慢受到彼此的影响,逐渐融为一个整体。而当所有的文明大一统,全部融为一个整体的时候,这个数轴世界才会重归和平。为了能够让自己的文明发展壮大,牛牛决定根据每个文明诞生的年代表,计算出什么时候才是和平的黄金时代。

 

简明题意:

我们定义一个整数可重集合是好的,当且仅当对于集合中任意两个元素 a, b (a \leq ba≤b) ,所有满足 a\leq c\leq ba≤c≤b 的元素 c 都在集合中出现过。

现在,给你一个数组 mSet,你需要做的是,对于这个数组的每一个前缀,判断这个前缀是不是一个好的集合。所以,你将计算出的是一个数组,为布尔类型。

 

示例1

输入

复制

[3,5,4,6]

输出

复制

[true,false,true,true]

说明

 

第一个前缀只有一个元素3,按照好的集合的定义,它显然是连续的。

第二个前缀有一个3和一个5,位于3和5之间的元素4却不在集合中,所以它不是连续的。

第三个前缀添加了一个4,弥补了第二个集合缺少4的问题,所以它是好的。

第四个前缀新增了一个6,依旧连续。

备注:

对于所有的数据,满足mSet的大小小于105, mSet[i]是32位有符号整数范围内的元素。

AC代码:

import java.util.*;


public class Solution {
    /**
     * 检查数组的每个前缀是不是一个好的集合
     * @param mSet int整型一维数组 
     * @return bool布尔型一维数组
     */
    public boolean[] continuousSet (int[] mSet) {
        if(mSet.length==0)return new boolean[mSet.length];
        int minn=mSet[0];
        int maxn=mSet[0];
        boolean[] vis=new boolean[mSet.length];
        Map<Integer,Integer>map=new HashMap<>();
        int flag=0;
        for(int i=0;i<mSet.length;i++){
            if(i==0){
                vis[i]=true;
                flag++;
            }
            else{
                if(map.get(mSet[i])!=null){
                    vis[i]=vis[i-1];
                }
                else{
                    flag++;
                    minn=Math.min(minn,mSet[i]);
                    maxn=Math.max(maxn,mSet[i]);
                   if(maxn-minn==flag-1)vis[i]=true;
                   else vis[i]=false;
                }
            }
            map.put(mSet[i],1);
        }
        return vis;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值