Rotateされた配列からTargetの数値を探す問題。ソートされた部分を検索範囲としてBinary Searchを行うことでO(log(N))で解くことができる。
pub fn search(nums: Vec<i32>, target: i32) -> i32 { let (mut start, mut end) = (0, nums.len() - 1); while start <= end { let mid = (start + end) / 2; if nums[mid] == target { return mid as i32; } if nums[start] <= nums[mid] { // if start..=mid is sorted if target >= nums[start] && target < nums[mid] { // if target is between start and mid, search on left partition end = mid - 1; } else { // else search on right partition start = mid + 1; } } else { // if mid..=end is sorted if target <= nums[end] && target > nums[mid] { // if target is between mid and start, search on right partition start = mid + 1; } else { // else search on left partition end = mid - 1; } } } -1 }