find_minimum_in_rotated_array2.rs 999 B

1234567891011121314151617181920212223242526272829303132333435363738394041
  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>, left: usize, right: usize) -> i32 {
  7. if left == right { return nums[left]; }
  8. if left + 1 == right { return nums[left].min(nums[right]); }
  9. if nums[left] < nums[right] { return nums[left]; }
  10. let mid = (left + right) / 2;
  11. Self::helper(nums, left, mid).min(Self::helper(nums, mid+1, right))
  12. }
  13. }
  14. #[cfg(test)]
  15. mod tests {
  16. use super::*;
  17. #[test]
  18. fn test_find_min() {
  19. let nums = vec![3,4,5,1,2];
  20. let res = Solution::find_min(nums);
  21. assert_eq!(res, 1);
  22. }
  23. #[test]
  24. fn test_find_min2() {
  25. let nums = vec![3,3,3,3,3];
  26. let res = Solution::find_min(nums);
  27. assert_eq!(res, 3);
  28. }
  29. #[test]
  30. fn test_find_min3() {
  31. let nums = vec![2,2,2,0,1];
  32. let res = Solution::find_min(nums);
  33. assert_eq!(res, 0);
  34. }
  35. }