zoukankan      html  css  js  c++  java
  • 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;
        }
    };
  • 相关阅读:
    python 连接操作mysql数据库
    (转)postfix疯狂外发垃圾邮件之分析与解决
    ansible 常用方法
    用python2.7.9 写个小程序搜索某个目录下行有某关键字
    python获取文件扩展名的方法(转)
    ceph 池管理
    UVALive 5412 Street Directions
    UVALive 3231 Fair Share
    UVA 11478 Halum
    2015 Multi-University Training Contest 4 hdu 5338 ZZX and Permutations
  • 原文地址:https://www.cnblogs.com/mikemeng/p/9185500.html
Copyright © 2011-2022 走看看