35. 搜索插入位置 - 力扣(LeetCode)
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int left = 0;
int right = nums.size() - 1;
// 使用二分查找算法寻找目标值的位置
while (left <= right) {
int mid = left + (right - left) / 2; // 防止溢出,更安全的计算mid
if (nums[mid] == target) {
return mid; // 找到目标值,直接返回其索引
} else if (nums[mid] < target) {
left = mid + 1; // 目标值在右半部分
} else {
right = mid - 1; // 目标值在左半部分
}
}
// 如果没有找到目标值,返回插入位置
return left;
}
};
69. x 的平方根 - 力扣(LeetCode)
class Solution {
public:
// 计算给定非负整数 x 的平方根的整数部分
int mySqrt(int x) {
// 特殊情况:如果 x 为 0,直接返回 0
if (x == 0) return 0;
// 定义二分查找的左右边界
int left = 1;
int right = x;
// 开始二分查找
while (left <= right) {
// 计算中间值 mid,避免溢出使用 left + (right - left) / 2
int mid = left + (right - left) / 2;
// 检查 mid * mid 是否小于等于 x
if (mid <= x / mid) {
// 如果 (mid + 1) * (mid + 1) 大于 x,则 mid 是我们要找的结果
if ((mid + 1) > x / (mid + 1)) {
return mid;
}
// 否则,说明 mid 还可以更大,更新左边界
left = mid + 1;
} else {
// 如果 mid * mid 大于 x,说明 mid 太大了,更新右边界
right = mid - 1;
}
}
// 返回结果,理论上不会执行到这里,因为一定会在循环中返回
return right;
}
};