★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
]➤[マイクロチャネルパブリック番号(WeiGanTechnologies)をあえてします
➤ブログパークアドレス:サンチンウィングチー(https://www.cnblogs.com/strengthen/)
➤GitHubアドレス:https://github.com/strengthen/LeetCode
元のアドレス➤:HTTPS://www.cnblogs。 COM /強化/ P / 11484246.html
アドレスがリンクブログパーク龍シャンカイはない場合➤、それは記事の著者をクロールすることができます。
➤テキストは、更新を変更されました!元のアドレスが読むことを強く推奨クリック!サポート作者!オリジナルをサポートしています!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
あなたは配列を指定されている colors
三色がされたが、: 1
、 2
と 3
。
あなたはまた、いくつかのクエリを与えられています。各クエリは、二つの整数から成る i
と c
、指定されたインデックスとの間の最短距離を返す i
と目標色を c
。解決策リターンが存在しない場合 -1
。
例1:
入力:色= [1,1,2,1,3,2,2,3,3]、クエリ= [1,3]、[2,2]、[6,1] 出力:[3、 0,3] 説明: インデックス1から最寄り3(3歩)インデックス4です。 インデックス2から最も近い2は、インデックス2自体(0歩)です。 インデックス6から最も近い1は、インデックス3(3歩の距離)です。
例2:
入力:色= [1,2]、クエリ= [0,3] 出力:[-1] 説明:3の配列に存在しません。
制約:
1 <= colors.length <= 5*10^4
1 <= colors[i] <= 3
1 <= queries.length <= 5*10^4
queries[i].length == 2
0 <= queries[i][0] < colors.length
1 <= queries[i][1] <= 3
あなたのアレイ与えるために colors
持っている、 1
、2
、 3
3色。
我々はする必要があり colors
、操作上のいくつかのお問い合わせ作る queries
二つの整数の未知の起源の各項目で構成され、 i
及び c
構図を。
今私は、インデックスから検索し、アルゴリズムの設計を支援するように依頼する i
目標色に持っている c
要素間の最短距離を。
解決策が存在しない場合は、ご返送ください -1
。
例1:
入力:色= [1,1,2,1,3,2,2,3,3]、クエリ = [1,3]、[2,2]、[6,1] 出力:[3、 0,3] 説明: インデックス3 4(距離3)での距離、最も近いカラーインデックス1。 最も近いカラーインデックス2 2からの距離は、独自の(距離0)です。 インデックス3(距離3)における最新カラーインデックス1から6。
例2:
入力:色= [1,2]、クエリ = [0,3] 出力:[--1] 説明:色なしカラー3。
ヒント:
1 <= colors.length <= 5*10^4
1 <= colors[i] <= 3
1 <= queries.length <= 5*10^4
queries[i].length == 2
0 <= queries[i][0] < colors.length
1 <= queries[i][1] <= 3
ランタイム:1880ミリ秒
1 クラスソリューション{ 2 FUNCのshortestDistanceColor(_色:[INT]、_クエリ:[INT]]) - > [INT] { 3 LETのN:のInt = colors.count 4 VARの左:[INT]] = [ [int]は(繰り返し:[intは(繰り返し: - 1、カウント:n)を、カウント:4 ) 5 VARの右:[INT]] = [[INT]](繰り返し:[INT](繰り返し: - 1、数:n)を、カウント:4 ) 6 用シェードに 1 ... 3 7 { 8 た場合に色が[ 0 ] == シェード 9 { 10 左側[シェード] [ 0 ] = 0 11 } 12の ための私に 1 .. < N 13 { 14 あれば左[シェード] [I- 1 ] =! - 1 15 { 16 左側[シェード] [I] =左側[シェード] [I- 1 ] + 1 17 } 18 であれば色[I] == シェード 19 { 20 左側[シェード] [I] = 0 21 } 22 } 23 } 24 用シェードで 1 ... 3 25 { 26 であれば色N- [ 1 ] == シェード 27 { 28 右[シェード] [N- 1 ] = 0 29 } 30 のための I におけるストライド(から:N - 2、スルー:0、によって: - 1 ) 31 { 32 もし右[シェード] [I + 1 ] =! - 1 33 { 34 右[シェード] [I] =右[シェード] [I + 1 ] + 1 35 } 36 であれば色[I] == シェード 37 { 38 右[シェード] [I] = 0 39 } 40 } 41 } 42 VARの結果:[INT] = [INT]() 43 のためのクエリにクエリ 44 { 45 VaRのインデックス:のInt =クエリ[ 0 ] 46 のvar req_color =クエリ[ 1 ] 47 のvar X:のInt = 左の[req_color] [索引] 48 VARの Y:のInt = 右[req_color] [索引] 49の VARの ANS:のInt = 0 50 であれば、X == - 1 || Y == - 1 51 { 52の ANS = MAX(x、y)は 53 } 54 他の 55 { 56の ANS = 分(X、Y) 57 } 58 result.append(ANS) 59 } 60 リターン結果 61 } 62 }