Find Minimum in Rotated Sorted Array II

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. int getMin(vector<int> &num, int start,int end) {
  2. int min = num[start];
  3. for(int i=start+1;i<end;i++) {
  4. if(num[i] < min) min = num[i];
  5. }
  6. return min;
  7. }
  8. int findMin(vector<int> &num) {
  9. int nSize = num.size();
  10. if(nSize == 0) return 0;
  11. if(nSize == 1) return num[0];
  12. int start = 0;
  13. int end = nSize - 1;
  14. while(num[start]>=num[end]) {
  15. if(end - start == 1) {
  16. return num[end];
  17. }
  18. if(num[start] == num[end]) return getMin(num,start,end);
  19. int mid = start + ((end - start) >> 1);
  20. if(num[mid] > num[end]) {
  21. start = mid;
  22. } else {
  23. end = mid;
  24. }
  25. }
  26. return num[start];
  27. }
posted @ 2014-12-16 15:06  purejade  阅读(82)  评论(0)    收藏  举报