C++の数値の2進形式で1の最長連続実行を検索するプログラム
数値がnであるとすると、バイナリ表現で1の最長連続実行の長さを見つける必要があります。
したがって、入力がn =312の場合、312はバイナリで100111000であり、3つの連続した1があるため、出力は3になります。
これを解決するには、次の手順に従います-
-
ret:=0、len:=0
-
初期化i:=0の場合、i <32の場合、更新(iを1増やします)、次のようにします。
-
n / 2が奇数の場合、
-
(lenを1増やします)
-
-
それ以外の場合
-
len:=0
-
-
ret:=retとlenの最大値
-
-
retを返す
理解を深めるために、次の実装を見てみましょう。
ソースコード(C ++)-
例
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int solve(int n) {
int ret = 0;
int len = 0;
for(int i = 0; i < 32; i++){
if((n >> i) & 1){
len++;
}else{
len = 0;
}
ret = max(ret, len);
}
return ret;
}
};
main(){
Solution ob;
cout << ob.solve(312);
} 入力
312
出力
3
-
C++での二分木最長連続シーケンス
二分木があるとしましょう。連続する最長のシーケンスパスの長さを見つけることができるかどうかを確認する必要があります。パスが、親子接続に沿ったツリー内の開始ノードから任意のノードまでのノードのシーケンスを参照している場合。最長の連続パスは、親から子をたどる必要がありますが、逆にする必要はありません。 したがって、入力が次のような場合、 最長の連続シーケンスパスは3-4-5であるため、出力は3になります。したがって、3を返します。 これを解決するには、次の手順に従います- 関数solveUtil()を定義します。これにより、ノード、prev、lenが1で初期化されます。 ノ
-
Pythonを使用して数値の2進形式で1の最長距離を見つけるプログラム
数値Nがあるとすると、2進表現で2つの連続する1の間の最長距離を見つける必要があります。 2つ連続する1がない場合は、0を返します。 したがって、入力が71の場合、バイナリの71は1000111であるため、出力は4になります。これで4つあり、最初の1と2番目の1は距離4にあります。他のすべては1つの距離にあります。ここでの最長距離は4です。 これを解決するには、次の手順に従います- K:=Nのバイナリ表現のビットのリストを作成する 最大:=0、C:=0、S:=0 フラグ:=False 0からKのサイズの範囲のiの場合、実行します K [i]が「1」でCが0