LeetCode 补充题 20. 立方根
题目描述
思路分析
解法一:二分查找(推荐)
核心思路:
- 目标函数
f(x) = x^3单调递增,可用二分查找。- 通过
mid^3与目标值比较,缩小搜索区间。- 用
long计算,避免中间溢出。
复杂度分析:
- 时间复杂度:O(log n),其中 n 表示输入的绝对值。
- 空间复杂度:O(1),仅使用常数额外空间。
class Solution {
public int cubeRoot(int x) {
long target = Math.abs((long) x);
long left = 0;
long right = target;
while (left <= right) {
long mid = left + (right - left) / 2;
long cube = mid * mid * mid;
if (cube == target) {
return x < 0 ? (int) -mid : (int) mid;
} else if (cube < target) {
left = mid + 1;
} else {
right = mid - 1;
}
}
int res = (int) right;
return x < 0 ? -res : res;
}
}
func cubeRoot(x int) int {
target := int64(x)
if target < 0 {
target = -target
}
left, right := int64(0), target
for left <= right {
mid := left + (right-left)/2
cube := mid * mid * mid
if cube == target {
if x < 0 {
return int(-mid)
}
return int(mid)
} else if cube < target {
left = mid + 1
} else {
right = mid - 1
}
}
res := int(right)
if x < 0 {
return -res
}
return res
}
相似题目
| 题目 | 难度 | 考察点 |
|---|---|---|
| 69. x 的平方根 | 简单 | 二分查找 |
| 367. 有效的完全平方数 | 简单 | 二分查找 |
| 50. Pow(x, n) | 中等 | 快速幂 |
| 29. 两数相除 | 中等 | 二分查找 |
| 875. 爱吃香蕉的珂珂 | 中等 | 二分答案 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!