今天开始,我只记录我需要解决的问题吧。
剑指offer53
int search(int* nums, int numsSize, int target){
int l = 0, r = numsSize;//保证区间是左闭右开
while (l < r)
{
int mid = l + (r - l) / 2;
if (nums[mid] <= target)
l = mid + 1;//向右边趋近
else r = mid;
}
int right = l - 1;//因为循环结束条件是l == r 但是r是取不到的,所以必须得-1
l = 0, r = numsSize;
while (l < r)
{
int mid = l + (r - l) / 2;
if (nums[mid] < target)
l = mid + 1;
else r = mid;
}
int left = l;//此时左侧可以取到
return right - left + 1;
}
剑指offfer15
int hammingWeight(uint32_t n) {
int ans = 0;
while (n)
{
n &= (n - 1);// n - 1 二进制位上 第一个1右边的0全变为1 再用 & 与 n 则可以将最右边的 1 去掉。
ans ++;
}
return ans;
}