Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのnと同じセットビット数でより高い数を見つけるプログラム?


数nがあるとします。バイナリ形式のnと同じ数の1で、次に大きい最小の数を見つける必要があります。

したがって、入力がn =7の場合、出力は11になります。これは、バイナリの7が0111であり、3つの7から次に高い値が11になり、バイナリの1011になります。

これを解決するには、次の手順に従います。

  • コピー:=n、ゼロ:=0、1:=0

  • コピーが0ではなく、コピーが偶数である場合は、実行してください

    • ゼロ:=ゼロ+ 1

    • コピー=コピー/2

  • コピーは奇妙ですが、実行してください

    • ones:=ones + 1

    • コピー=コピー/2

  • 右:=1と0

  • n:=n OR(2 ^ right)

  • n:=n AND反転((2 ^ right)-1)

  • n:=n OR((2 ^(ones-1))-1

  • nを返す

理解を深めるために、次の実装を見てみましょう。

class Solution:
   def solve(self, n):
      copy = n
      zeros = 0
      ones = 0
      while copy and not copy & 1:
         zeros += 1
         copy >>= 1
      while copy & 1:
         ones += 1
         copy >>= 1
      right = ones + zeros
      n |= 1 << right
      n &= ~((1 << right) - 1)
      n |= (1 << ones - 1) - 1
      return n

ob = Solution()
n = 7
print(ob.solve(n))

入力

7

出力

11

  1. Pythonを使用して、同じラベルを持つサブツリー内のノードの数を見つけるプログラム

    ノードに0からn-1までの番号が付けられたn個のノードを持つルート化された一般ツリーがあるとします。各ノードには、小文字の英字のラベルがあります。ラベルはlabels配列の入力として指定されます。ここで、lables[i]にはi番目のノードのラベルが含まれています。ツリーはエッジリストで表され、各エッジeには[u、v]があり、uは親、vは子を表します。サイズnの配列Aを見つける必要があります。これは、iと同じラベルを持つi番目のノードのサブツリー内のノードの数を表します したがって、入力が次のような場合 ここで、n =5およびlabel=“ ccaca” ルートには同じラベルの子

  2. リスト内で最大数を見つけるPythonプログラム

    この記事では、特定の問題ステートメントを解決するための解決策とアプローチについて学習します。 問題の説明 与えられたリスト入力では、与えられたリストの中で最大の数を見つける必要があります。 ここでは、2つのアプローチについて説明します 並べ替え手法の使用 組み込みのmax()関数を使用する アプローチ1-組み込みのsort()関数を使用する 例 list1 = [18, 65, 78, 89, 90] list1.sort() # main print("Largest element is:", list1[-1]) 出力 Largest element is: