19. x 的平方根
题目描述
计算并返回非负整数 x 的平方根的整数部分。
解题思路
这道题的核心在于利用有序性进行二分查找。假设最终结果为 index,那么区间 [0, index] 内的元素平方后都小于等于 x,而 [index+1, x] 内的元素平方后都大于 x。通过不断缩小区间,我们就能找到那个临界点。
这里有个细节需要注意:在计算中间值 mid 时,如果 right 接近 INT_MAX,right - left + 1 可能会溢出 int 范围。所以务必将运算提升为 long long 类型,避免逻辑错误。
参考实现
class Solution {
public:
int mySqrt(int x) {
int left = 0;
int right = x;
while(left < right) {
// 向上取整防止死循环,同时强转 long long 防溢出
int mid = left + ((long long)right - left + 1) / 2;
if((long long)mid * mid <= x) {
left = mid;
} else {
right = mid - 1;
}
}
return left;
}
};
流程解析

20. 搜索插入位置
题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。



