• 849. 到最近的人的最大距离


    题目:

    在一排座位( seats)中,1 代表有人坐在座位上,0 代表座位上是空的。
    
    至少有一个空座位,且至少有一人坐在座位上。
    
    亚历克斯希望坐在一个能够使他与离他最近的人之间的距离达到最大化的座位上。
    
    返回他到离他最近的人的最大距离。
    
    示例 1:
    
    输入:[1,0,0,0,1,0,1]
    输出:2
    解释:
    如果亚历克斯坐在第二个空位(seats[2])上,他到离他最近的人的距离为 2 。
    如果亚历克斯坐在其它任何一个空位上,他到离他最近的人的距离为 1 。
    因此,他到离他最近的人的最大距离是 2 。 
    示例 2:
    
    输入:[1,0,0,0]
    输出:3
    解释: 
    如果亚历克斯坐在最后一个座位上,他离最近的人有 3 个座位远。
    这是可能的最大距离,所以答案是 3 。
    提示:
    
    1 <= seats.length <= 20000
    seats 中只含有 01,至少有一个 0,且至少有一个 1
    class Solution {
    public:
        int maxDistToClosest(vector<int>& seats) {
            int n = seats.size();
            int res = 0;
            int sit = 0;
            
            vector<int> left(n,0);
            vector<int> right(n,0);
            
            /*left*/
            int flag = -1;
            left[0] = -1;
            for(int i = 1;i < n;++i){
                if(seats[i-1]){
                    flag = i-1;
                }
                if(flag >= 0){
                    left[i] = i - flag;
                }else{
                    left[i] = -1;
                }
                //cout<<left[i]<<",";
            }
            //cout<<endl;
            
            /*right*/
            flag = -1;
            right[n-1] = -1;
            for(int i = n-2 ;i >= 0; --i){
                if(seats[i+1]){
                    flag = i+1;
                }
                
                if(flag >= 0){
                    right[i] = flag - i;
                }else{
                    right[i] = -1;
                }
                //cout<<right[i]<<",";
            }
            //cout<<endl;
            
            for(int i = 0;i < n; ++i){
                if(seats[i] == 0){
                    int distance = 20001;
                    if(left[i] > 0){
                        distance = min(left[i],distance);
                    }
                    if(right[i] > 0){
                        distance = min(right[i],distance);
                    }
                    if(distance < 20001){
                        res = max(res,distance);
                    }
                }
            }
            
            return res;
        }
    };
  • 相关阅读:
    虚拟机调用本机数据库发生错误
    VS2010添加虚拟机发布的WebService引用
    IIS发布错误及解决
    JSON.parse()与JSON.stringify()的区别
    数组去重
    React性能优化 PureComponent
    JS逻辑题 技术点: 1). 变量提升 2). 函数提升 3). 预处理 4). 调用顺序
    React组件间信息传递方式
    css/css3实现未知宽高元素的垂直居中和水平居中
    关于setTimeout的一个逻辑题
  • 原文地址:https://www.cnblogs.com/mikemeng/p/9185500.html
Copyright © 2020-2023  润新知