提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
俩到经典题目
一、最近公共祖先
题目描述
解题分析
1.求一个结点的父亲结点:A=a/2;
思路:
- 先比较俩个数的大小
- 每次用大数/2找到他的父亲结点
- 判断这俩个结点是不是同一个结点,如果相同,那么一定是公共祖先
代码演示
public class LCA {
public int getLCA(int a, int b) {
// write code here
while(a!=b){
if(a>b){
a/=2;
}else if(a<b){
b/=2;
}
}
return a;
}
}
二.求最大连续bit数
题目描述
解题分析
定义一个tempc保存每一次读取1的个数并累加,当读取到0时清0
定义一个count保存历史最多读取到的1的个数,相当于max(count,tempc);
获取二级制中的每一位,直到遍历完全
代码演示
## 代码演示
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n=scanner.nextInt();
int count=0;
int tempc=0;
while(n!=0){
if((n&1)==1){
tempc++;
n=n>>1;
count=Math.max(tempc,count);
}else{
tempc=0;
n=n>>1;
}
}
System.out.println(count);
}
}
总结
得到一个结点的父亲节点n=n/2
判断二级制数字末位是不是1,n&1