私はバイナリ検索を実装しています。この関数は、配列に見つかったときにターゲット値のインデックスを返します。それ以外の場合は-1
です。ダウンキャスト配列の長さとインデックス
usize
ではなく、i32
のインデックスを扱うことをお勧めします。ターゲットが見つからない場合は、-1
を返すためにネガを許可する必要があります。私は関数の端に明示的にキャストしています。これの周りには、より錆びた方法は何ですか?
fn binary_search(nums: &[i32], target: i32) -> i32 {
let num_size: i32 = nums.len() as i32; // This seems bad
bsearch(nums, target, 0, num_size as usize)
}
fn bsearch(nums: &[i32], target: i32, lo: usize, hi: usize) -> i32 {
if hi < lo {
return -1;
}
let mid_idx = lo + ((hi - lo)/2);
let guess = nums[mid_idx];
if guess > target {
bsearch(nums, target, lo, mid_idx - 1)
} else if guess < target {
bsearch(nums, target, mid_idx + 1, hi)
} else {
mid_idx as i32 // This seems bad
}
}
また、[binary_search'の標準ライブラリ実装](https://doc.rust-lang.org/std/primitive.slice.html#method.binary_search)を見て、ヒントを得ることもできますどのような慣用的な錆の方法であろうか。 – Shepmaster
これは考慮していなかった、ありがとう! –