題解 | 求最大連續(xù)bit數(shù)
求最大連續(xù)bit數(shù)
http://www.fangfengwang8.cn/practice/4b1658fd8ffb4217bc3b7e85a38cfaf2
import java.util.*; import java.lang.*; // 注意類名必須為 Main, 不要有任何 package xxx 信息 public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); // 注意 hasNext 和 hasNextLine 的區(qū)別 while (in.hasNextInt()) { // 注意 while 處理多個 case int n = in.nextInt(); int tmp, maxlen = 1, upper = (int) (Math.log(n)/Math.log(2))+1; for(int i=0;i<=upper;i++){ for(int j=upper;j>=i;j--){ tmp = (int) Math.pow(2,j+1) - (int) Math.pow(2,i); if((tmp&n)==tmp && j-i+1>maxlen) { maxlen = j-i+1; break; } } } System.out.println(maxlen); } } }
位運算,O(log(n)),也沒啥好說的,就是2個for循環(huán),每次從i到j去做與運算,看看是不是能匹配上,越往后遍歷長度越短,只要匹配上了可以提前結束,一定是最長的