説明:
行にseats
、1
その席に座っている人を表し、0
座席が空であることを表しています。
少なくとも一つの空いている席、少なくとも一人の座っがあります。
アレックスは彼と彼に最も近い人物間の距離が最大になるように席に座ってしたいと考えています。
最も近い人物への最大距離を返します。
例1:
入力:[1,0,0,0,1,0,1]
出力:2
説明:
アレックスは、第二開口座席に座っている場合(座席[2])は、次に最も近い人が距離2を有する
アレックスは任意に座っている場合最も近い人が距離1を有する他のオープンシートは、
このように、最も近い人物の最大距離は2です。
例2:
入力:[1,0,0,0]
出力:3
説明:
アレックスは最後の席に座っている場合は、最も近い人が3席の距離です。
これは、可能な最大距離なので、答えは3です。
注意:
1 <= seats.length <= 20000
seats
のみ0または1、少なくとも一つ含まれ0
、少なくとも1つを1
。
容認されました
45488
提出
108771
詳細コード
クラスソリューション{ 公共 のint maxDistToClosest(INT []席){ 場合(seats.length == 2 ){ リターン 1 。 } int型の結果= 0 。 int型の最大値= はInteger.MIN_VALUE。 int型のカウント= 0 ; 文字列s = "" ; 以下のために(INT ; I <seats.length; iが0 = I ++ ){ S = S + 席[i]は、 もし(座席[I] == 0 ){ カウント ++ ; } 他に{ 場合(数> 最大){ 最大 = 数; } カウント = 0 ; } } もし(カウント> MAX){ 最大 = カウント。 } 文字列のサブ = "" ; 用(intは I ++; I <マックスI = 0 ){ 副 =サブ+ "0" 。 } であれば(sub.equals(s.substring(0、sub.length()))|| sub.equals(s.substring(s.length() - sub.length()、s.length()))) { 結果 = マックス。 } 他{ 場合(最大%2 == 0 ){ 結果 =最大/ 2 。 } 他{ 結果 =最大値/ 2 + 1 。 } } int型 sub_max_1 = 0 。 int型 sub_max_2 = 0 ; 以下のために(INT ; I <seats.length; iが0 = I ++ ){ 場合(座席[I] == 0 ){ sub_max_1 ++ 。 } 他の{ 破ります。 } } のための(INT I = seats.length-1; I> 0; i-- ){ 場合(座席[I] == 0 ){ sub_max_2 ++ 。 } 他{ ブレーク。 } } int型 TMP = sub_max_1> sub_max_2?sub_max_1:sub_max_2。 リターン結果> tmpの?結果:TMPを、 } }