与えられた整数のバイナリ表現で最長の連続した1の長さを見つけるC#プログラム
連続する1をフェッチするには、ビット単位の左シフト演算子を使用します。これが10進数です。
i = (i & (i << 1));
Iの値が0になるまで上記をループし、変数を使用して長さをフェッチします。ここで数えます。
while (i != 0) {
i = (i & (i << 1));
count++;
} ここで取り上げた例は150です。
150のバイナリは10010110です。したがって、2つの連続したバイナリがあります。
例
using System;
class Demo {
private static int findConsecutive(int i) {
int count = 0;
while (i != 0) {
i = (i & (i < 1));
count++;
}
return count;
}
// Driver code
public static void Main() {
// Binary or 150 is 10010110
Console.WriteLine(findConsecutive(150));
}
} 出力
2
-
Pythonでバイナリツリーの最長の連続パスの長さを見つけるプログラム
二分木があるとしましょう。二分木で最長のパスを見つける必要があります。 したがって、入力が次のような場合 連続する最長のシーケンスが[2、3、4、5、6]であるため、出力は5になります。 これを解決するには、次の手順に従います- rootがnullの場合、 0を返す maxPath:=0 関数helper()を定義します。これはノードを取ります inc:=1、dec:=1 ノードの左側がnullでない場合、 [left_inc、left_dec]:=ヘルパー(ノードの左側) それ以外の場合、 [left_inc、left_dec]:=[0、0] ノード
-
Pythonで二分木の最長交互パスの長さを見つけるプログラム
二分木があるとすると、左と右の子を交互に繰り返して下る最長のパスを見つける必要があります。 したがって、入力が次のような場合 交互のパスが[2、4、5、7、8]であるため、出力は5になります。 これを解決するには、次の手順に従います。 rootがnullの場合、 0を返す 関数dfs()を定義します。これには、ノード、カウント、フラグが必要です ノードがnullでない場合、 フラグがTrueと同じ場合、 a:=dfs(ノードの左側、カウント+ 1、False) b:=dfs(ノードの右側、1、True) それ以外の場合、フラグがFalseと同じ場合、 a:=dfs