我想说
每天坚持一点点,坚持带来大改变
今天是刷题的第_11天,加油!
编程题
1.最小公共祖先
递归方式
class LCA {
public:
int getLCA(int a, int b) {
// write code here
if(a==b) return a;
//如果b的父亲还大于等于a,a不动,b动
if(a<=b/2)
{
return getLCA(a,b/2);
}
else if(b<=a/2)
{
return getLCA(a/2,b);
}
else
{
return getLCA(a/2,b/2);
}
}
};
循环方式
class LCA {
public:
int getLCA(int a, int b) {
while (a != b) {
//如果a大,a去找a的父亲
if(a > b)
a /= 2;
//否则b去找b的父亲
else
b /= 2;
}
//相等时跳出循环 返回其中一个即可
return a;
}
};
2. 最大连续bit数
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int count = 0; //记录当前count
int Max = 0; //记录最大个数
for(int i = 0;i<32;++i)
{
if(((n>>i)&1) == 1)
{
++count;
Max = max(Max,count);//更新最大1的个数
}
else //遇到非0 重新计数
{
count = 0;
}
}
cout << Max << endl;
return 0;
}