Pythonで最初と最後のペアの積が同じである4倍の数を見つけるプログラム
numsと呼ばれる数のリストがあり、一意の正の数numsがあるとします。 a * b =c * d、a、b、c、dがすべてnumsの別個の要素であるように、numsから(a、b、c、d)のような4倍の数を見つける必要があります。
したがって、入力がnums =[3、6、4、8]の場合、4倍は[[3,8,6,4]、[3,8,4,6]であるため、出力は8になります。 、[8,3,6,4]、[8,3,4,6]、[6,4,3,8]、[4,6,3,8]、[6,4,8,3] 、[4,6,8,3]]。
これを解決するには、次の手順に従います-
- c:=新しい地図
- n:=numsのサイズ
- 0からn-1の範囲のiの場合、do
- i +1からn-1の範囲のjの場合、do
- x:=nums [i] * nums [j]
- c [x]:=1 +(利用可能な場合はc [x]、それ以外の場合は0)
- i +1からn-1の範囲のjの場合、do
- ret:=0
- cのすべての値のリストにあるxごとに、
- ret:=ret + x *(x-1)
- return ret * 4
例
理解を深めるために、次の実装を見てみましょう-
def solve(nums): c = {} n = len(nums) for i in range(n): for j in range(i + 1, n): x = nums[i] * nums[j] c[x] = c.get(x, 0) + 1 ret = 0 for x in c.values(): ret += x * (x - 1) return ret * 4 nums = [3, 6, 4, 8] print(solve(nums))
入力
[3, 6, 4, 8]
出力
8
-
Pythonの最初から最後のノードまでの制限されたパスの数を見つけるプログラム
無向加重連結グラフが1つあるとします。グラフにはn個のノードがあり、1からnまでのラベルが付けられています。開始から終了までのパスは、[z0、z1、z2、...、zk]のようなノードのシーケンスです。ここで、z0は開始ノード、zkは終了ノードであり、ziとzi+1の間にエッジがあります。ここで0<=i dist(zi + 1)(0 <=i <=k-1)も満たす特別なパスです。したがって、ノード1からノードnまでの制限されたパスの数を見つける必要があります。答えが大きすぎる場合は、10 ^ 9+7を法として答えを返します。 したがって、入力が次のような場合 3つの制限されたパス(1,2
-
Pythonで同じ最初の文字を共有するすべての単語を検索するプログラム
小文字の単語のリストがあるとすると、すべての単語の最初の文字が同じである最長の連続したサブリストの長さを見つける必要があります。 したがって、入力が[she、 sells、 seashells、 on、 the、 seashore]の場合、3つの連続する単語が she、 sellsであるため、出力は3になります。 、「貝殻」、すべて同じ最初の文字「s」があります。 これを解決するには、次の手順に従います- maxlength:=0 curr_letter:=Null、curr_length:=0 単語内の各単語について、 curr_letterがnullであるか、curr_le