【スイフト]は目標色との間の最短距離をLeetCode1182 |。ターゲットカラーまでの最短距離

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
]➤[マイクロチャネルパブリック番号(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持っている、   12、  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ミリ秒

メモリ使用率:28.9メガバイト
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 }

 

おすすめ

転載: www.cnblogs.com/strengthen/p/11484246.html