最近公共祖先_求最大连续bit数_参数解析
最近公共祖先
import java.util.*; public class LCA { public int getLCA(int a, int b) { //每次都让较大的节点先找父节点, // 直到 a和b相遇!就是公共节点! while(a!=b){ if(a>b){ a/=2; }else{ b/=2; } } return a; /* int[] array1 = new int[a]; int[] array2 = new int[b]; int i = 0; while(a!=0){ array1[i++] = a; a/=2; } int j = 0; while(b!=0){ array2[j++] = b; b/=2; } for(int k = 0;k<i;k++){ for(int z = 0;z<j;z++){ if(array1[k]==array2[z]){ return array1[k]; } } } return array1[i-1]; */ } }
求最大连续bit数
//按位与,右移! import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); int n = sc.nextInt(); //将整数转换成2进制字符串! String str = Integer.toBinaryString(n); //分割子串,以0分割! String[] strs = str.split("0"); int max = 0; for(int i = 0;i<strs.length;i++){ if(strs[i].length()>max){ max = strs[i].length(); } } System.out.println(max); /*int countMax = 0;//保存最大连续1的个数! int count = 0;//暂时保存连续1的个数 while(n!=0){ if((n&1)==1){ //按位与& 结果为1 说明这里为1 count++; }else{ countMax = Math.max(count,countMax); count = 0; } n = n>>1; } //可能连续最大的1次数在二进制首! countMax = Math.max(count,countMax); System.out.println(countMax); */ } }
参数解析
//方法一: import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); String str = sc.nextLine(); //xcopy /s "C:\\program files" "d:\" 分割后,空格元素的后一个元素就是""分割的元素! 所以这个就不需要分割了! int flag = 1;//定义标志位,标志 " int count = 0; ArrayList<StringBuilder> result = new ArrayList<>(); StringBuilder sb = new StringBuilder(); // l "b:\" /kzv /yar // u "a e i o u" r for(int i = 0;i< str.length();i++){ char ch = str.charAt(i); if(ch=='"'){ flag^=1; continue; } if(ch!=' '){ sb.append(ch); } if(ch==' '&&flag==0){//空格 且标志位为 0 说明这是""里的空格! sb.append(ch); }else if(ch==' '&&flag==1){ //需要分割! result.add(sb); sb = new StringBuilder(); } } result.add(sb); System.out.println(result.size()); for(int i = 0;i<result.size();i++){ System.out.println(result.get(i)); } } } //方法二: //通过 \n 字符实现打印换行! import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String str = sc.nextLine(); StringBuffer sb = new StringBuffer(); int len = 0; int quotaNum = 0;//这里作为"标志位! // xcopy /s "C:\\program files" "d:\" for (int i = 0; i < str.length(); i++){ if (str.charAt(i) == '"'){ //标志位++! quotaNum++; continue; } if (str.charAt(i) != ' '){//不是空格就保存! sb.append(str.charAt(i)); } else if (quotaNum % 2 == 0){//说明这里不是""里的空格! sb.append('\n'); //用 \n 换行符分割! len++; //长度++! }else { //""里的空格,保存! sb.append(' '); } } System.out.println(len+1); //最后一个字符子串没有计算! System.out.println(sb.toString()); //打印结果! } }#笔试题#