find_minimum_in_rotated_array.rs 764 B

12345678910111213141516171819202122232425262728293031323334353637
  1. struct Solution;
  2. impl Solution {
  3. pub fn find_min(nums: Vec<i32>) -> i32 {
  4. Self::helper(&nums, 0, nums.len() -1)
  5. }
  6. fn helper(nums: &Vec<i32>, s: usize, e: usize) -> i32 {
  7. if s == e { return nums[s]; }
  8. if s + 1 == e { return nums[s].min(nums[e]); }
  9. if nums[s] < nums[e] { return nums[s]; }
  10. let mid = (s + e) / 2;
  11. if nums[mid] > nums[e] {
  12. return Self::helper(nums, mid, e);
  13. }
  14. if nums[s] > nums[mid] {
  15. return Self::helper(nums, s, mid);
  16. }
  17. 0
  18. }
  19. }
  20. #[cfg(test)]
  21. mod tests {
  22. use super::*;
  23. #[test]
  24. fn test_find_min() {
  25. let nums = vec![3,4,5,1,2];
  26. let res = Solution::find_min(nums);
  27. assert_eq!(res, 1);
  28. }
  29. }