https://leetcode.com/problems/sqrtx/
x の累乗根の整数部分を返す問題。x は最大
この配列を二分探索して、middle の値が
- ちょうど整数部分と一致すればそのままその整数を返す(ex.
$x=9$ のときの$3$ など) - 最後までヒットしなかった場合、少なくとも middle - 1 の整数よりは大きいので middle - 1 を返す(ex.
$x=6$ のときの$2$ など)
impl Solution {
pub fn my_sqrt(x: i32) -> i32 {
if x < 2 {
return x;
};
let mut left = 1;
let mut right = x as i64;
let mut middle = (x / 2) as i64;
while left < right {
match (middle * middle).cmp(&(x as i64)) {
std::cmp::Ordering::Equal => return middle as i32,
std::cmp::Ordering::Greater => {
right = middle;
middle = (left + right) / 2;
}
std::cmp::Ordering::Less => {
left = middle + 1;
middle = (left + right) / 2;
}
}
}
(right - 1) as i32
}
}