LeetCode 154 Find Minimum in Rotated Sorted Array II (C++, Python)
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.
Solution C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | class Solution { int intFindMin(vector<int>& num, int low, int high) { while (low < high) { int mid = (low + high) / 2; if (num[mid] > num[mid + 1]) return num[mid + 1]; if (num[mid] == num[low] || num[mid] == num[high]) { return min(intFindMin(num, mid + 1, high), intFindMin(num, low, mid)); } if (num[mid] > num[high]) { low = mid + 1; } else if (num[mid] < num[low]) { high = mid; } else { break; } } return num[low]; } public: int findMin(vector<int> &num) { return intFindMin(num, 0, num.size() - 1); } }; |
Solution Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | class Solution: def intFindMin(self, num, low, high): while low < high: mid = (low + high) / 2 if num[mid] > num[mid + 1]: return num[mid + 1] if num[mid] == num[low] or num[mid] == num[high]: return min(self.intFindMin(num, low, mid), self.intFindMin(num, mid + 1, high)) if num[mid] > num[high]: low = mid + 1 elif num[mid] < num[low]: high = mid else: break return num[low] # @param num, a list of integer # @return an integer def findMin(self, num): return self.intFindMin(num, 0, len(num) - 1) |