目录
题目链接:求最大连续bit数_牛客题霸_牛客网 (nowcoder.com)
题目链接:最近公共祖先_牛客题霸_牛客网 (nowcoder.com)
题目一:求最大连续bit数
题目链接:求最大连续bit数_牛客题霸_牛客网 (nowcoder.com)
解题思路:
根据位运算,获取每一位的二进制值。获取第i位的值: (n >> i) & 1。如果1连续,则计数累加,如果不连 续,则从0开始计数。
int count=0;用于统计连续1的个数
int max_count=0;用于统计当前最大连续1的个数
代码实现:
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int num=0;
int count=0,max_count=0;
cin>>num;
while(num)
{
if(num&1)
{
count++;
max_count=max(count,max_count);
}
else {
count=0;
}
num=num>>1;
}
cout<<max_count<<endl;
}
题目二:最近公共祖先
题目链接:最近公共祖先_牛客题霸_牛客网 (nowcoder.com)
解题思路:
题目所描述的满二叉树如下: 1
/ \
2 3
/ \ / \
4 5 6 7
上述树中子节点与父节点之间的关系为root = child / 2 所以如果a != b,两个数进行比较,就让其中的较大数除以2, 如此循环直到a == b 即是原来两个数的最近公共祖先 比如: 2 和7的最近公共祖先:7/2 = 3 ---> 3/2 = 1, 2/2 = 1, 得到1为它们的公共祖先
代码实现:
class LCA {
public:
int getLCA(int a, int b) {
// write code here
while(a!=b)
{
if(a>b)
{
a=a/2;
}
else {
b=b/2;
}
}
return a;
}
};