Pythonで断片から配列を形成できるかどうかをチェックするプログラム
すべての要素が一意であり、piecesと呼ばれる異なる小さな配列を持つ別の配列を持つ配列numがあるとします。配列を任意の順序で連結してメイン配列の数を取得できるかどうかを確認する必要があります。ただし、各配列部分に存在する要素を並べ替えることは許可されていません[i]。
したがって、入力がnums =[5,1,12,36,2,47,6] piece =[[2,47,6]、[12,36]、[1]、[5]]のようである場合、次に、[[5]、[1]、[12,36]、[2,47,6]]の順序で連結してメイン配列を取得できるため、出力はTrueになります。
これを解決するには、次の手順に従います-
-
temp:=新しいリスト
-
ピースごとに、実行します
-
p [0]がnumsに存在しない場合、
-
Falseを返す
-
-
l:=pのサイズ
-
indx:=index(p [0])in nums
-
インデックスindxからindx+l-1までのnumsのサブ配列がpと同じでない場合、
-
Falseを返す
-
-
それ以外の場合
-
tempの後にpを追加
-
-
-
numsのサイズがtempのサイズと同じである場合、
-
Trueを返す
-
-
それ以外の場合
-
Falseを返す
-
例(Python)
理解を深めるために、次の実装を見てみましょう-
def solve(nums, pieces): temp = [] for p in pieces: if p[0] not in nums: return False l = len(p) indx = nums.index(p[0]) if nums[indx:indx+l] != p: return False else: temp.extend(p) if len(nums) == len(temp): return True else: return False nums = [5,1,12,36,2,47,6] pieces = [[2,47,6],[12,36],[1],[5]] print(solve(nums, pieces))
入力
[5,1,12,36,2,47,6], [[2,47,6],[12,36],[1],[5]]
出力
True
-
Pythonで左端または右端の位置に到達できるかどうかを確認するプログラム
R、B、およびdot(。)の3つのタイプの文字を含む文字列があるとします。ここで、Rは現在の位置を表し、Bはブロックされた位置を表し、dot(。)は空の位置を表します。これで、有効(空)である限り、現在の位置に隣接する任意の位置に1つのステップで移動できます。 )。左端または右端のどちらかに到達できるかどうかを確認する必要があります。 したがって、入力がs =........... R ..... BBBB .....の場合、Rは左端の位置に到達できるため、出力はTrueになります。ブロックはありません。 これを解決するには、次の手順に従います- r_pos:=sの「R」のインデックス
-
Pythonで、どの都市からでも、どの都市からでも訪問できるかどうかを確認するプログラム
範囲[0、n)の数値として表されたn個の都市があり、ある都市を別の都市に接続する一方通行の道路のリストもあるとします。どの都市からどの都市にも到達できるかどうかを確認する必要があります。 したがって、入力がn =3の場合、roads =[[0、1]、[0、2]、[1,0]、[1,2]、[2,0]、[2,1]] 、0から1および1から0に移動できるため、出力はTrueになります これを解決するために、次の手順に従います- 関数dfs()を定義します。これには、i、visited、gが必要です。 iを訪問済みとしてマーク g [i]のjごとに、実行 jにアクセスしない場