数を文字列として与えられるので、我々はバイナリで1000000と最長の長さ0が6である64を言う渡す場合
Integer.parseInt(String,Base)
を使用して数を解析することができ、whileループを実行する必要log2(64)は6ですが、この解決策はあなたが探しているものでなければなりません。私は16,32および64のためにこのプログラムを実行しているし、それがログ(N)で動作時間をこの場合に関与した文字によって全く解析文字が存在しないとしてものためのビット演算子を使用
public class CountZeroes {
private static long getZeroes(String s) {
int x = Integer.parseInt(s,2);
long count = 0, maxSoFar = 0;
while (x > 0) {
System.out.println("Running");
if ((x & 1) == 1) {
if (count > maxSoFar) {
maxSoFar = count;
}
count = 0;
} else {
count += 1;
}
x = x >> 1;
}
return maxSoFar;
}
public static void main(String[] args) {
System.out.println(getZeroes("10000"));
System.out.println(getZeroes("100000"));
System.out.println(getZeroes("1000000"));
}
}
以下のソリューションをご確認ください同じ。これがいいのか一度確認してください。
ありがとう
入力を読み込むだけですでにO(b)時間がかかります。 – Henry
@Henry:それについてはどうしたらいいですか?まだログ時間を達成する方法はありますか?割り当てからのヒントは、ビットを左にシフトする必要があることを示しています。最初の1ビット、次に2ビット、次に4ビット、8ビット、16ビットなど...各シフトの後にAND関数を使用する必要がありますそれは私にシフトする次のシーケンスを与えるだろう...しかし、私はそれを使用する方法がわからない –
私はそれを証明することはできませんが、私の腸の感覚は私にはないと言います。 – Henry