Leetcode | Find Minimum in Rotated Sorted Array I && II

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

You may assume no duplicate exists in the array.

二分查找就行了。

 1 class Solution {

 2 public:

 3     int findMin(vector<int> &arr) {

 4         if (arr.empty()) return -1;

 5         int l = 0, h = arr.size() - 1, m, min = INT_MAX;

 6         while (l <= h) {

 7             m = l + (h - l) / 2;

 8             if (arr[m] >= arr[l]) {

 9                 if (min > arr[l]) min = arr[l];

10                 l = m + 1;

11             } else {

12                 if (arr[m] < min) min = arr[m];

13                 h = m - 1;

14             }

15         }

16         return min;

17     }

18 };

Follow up for "Find Minimum in Rotated Sorted Array":
What if duplicates are allowed?

Would this affect the run-time complexity? How and why?
Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).

Find the minimum element.

The array may contain duplicates.

 1 class Solution {

 2 public:

 3     int findMin(vector<int> &arr) {

 4         if (arr.empty()) return -1;

 5         int l = 0, h = arr.size() - 1, m, min = INT_MAX;

 6         while (l <= h) {

 7             m = l + (h - l) / 2;

 8             if (arr[m] > arr[l]) {

 9                 if (min > arr[l]) min = arr[l];

10                 l = m + 1;

11             } else if (arr[m] < arr[l]) {

12                 if (arr[m] < min) min = arr[m];

13                 h = m - 1;

14             } else {

15                 if (arr[m] < min) min = arr[m];

16                 l++;

17             }

18         }

19         return min;

20     }

21 };

 

你可能感兴趣的:(LeetCode)