【原创】leetCodeOj --- Find Minimum in Rotated Sorted Array II 解题报告
2014-10-22 14:14
393 查看
题目地址:
https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/
题目内容:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,
Find the minimum element.
The array may contain duplicates.
方法:
此题难点在于元素可重复,因此,关键在于如何分解出子问题。大概思路如下:
设首节点为C,中结点为A,末尾结点为D,则有:
C < D ? 返回 C
C == D ? 找到下一个为C不等的F,递归调用F,D。若不存在F,则返回C
C > D ? C < A ? ---> 递归调用A+1,D
C > A ? ---> 寻找A之前第一个和A不等的值B,若B > A则返回A,若B < A则递归调用C,B
C == A ? ---> 递归调用A+1,D
全部代码:
https://oj.leetcode.com/problems/find-minimum-in-rotated-sorted-array-ii/
题目内容:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e.,
0 1 2 4 5 6 7might become
4 5 6 7 0 1 2).
Find the minimum element.
The array may contain duplicates.
方法:
此题难点在于元素可重复,因此,关键在于如何分解出子问题。大概思路如下:
设首节点为C,中结点为A,末尾结点为D,则有:
C < D ? 返回 C
C == D ? 找到下一个为C不等的F,递归调用F,D。若不存在F,则返回C
C > D ? C < A ? ---> 递归调用A+1,D
C > A ? ---> 寻找A之前第一个和A不等的值B,若B > A则返回A,若B < A则递归调用C,B
C == A ? ---> 递归调用A+1,D
全部代码:
class Solution { public: int findMin(vector<int> &num) { int len = num.size(); return trueStuff(num,0,len - 1); } int trueStuff(vector<int> &num,int start,int fin) { if (start == fin) return num[start]; if (num[start] < num[fin]) return num[start]; if (num[start] == num[fin]) { while (start < fin) { if (num[start] != num[fin]) break; start ++; } if (start == fin) return num[start]; else return trueStuff(num,start,fin); } int mid = (start + fin) / 2; if (num[start] < num[mid]) return trueStuff(num,mid + 1,fin); if (num[start] > num[mid]) { int tmp = mid; while (num[tmp] == num[tmp-1]) tmp --; tmp --; if (num[tmp] > num[mid]) return num[mid]; else return trueStuff(num,start,tmp); } if (num[start] == num[mid]) return trueStuff(num,mid + 1,fin); } };
相关文章推荐
- 【原创】leetCodeOj --- Intersection of Two Linked Lists 解题报告(经典的相交链表找交点)
- 【原创】leetCodeOj --- Sort List 解题报告
- 【原创】leetCodeOj --- Excel Sheet Column Title 解题报告
- 【原创】leetCodeOj --- Fraction to Recurring Decimal 解题报告
- 【原创】leetCodeOj --- Merge k Sorted Lists 解题报告
- 【原创】leetCodeOj --- Min Stack 解题报告
- 【原创】leetCodeOj --- Largest Number 解题报告
- 【原创】leetCodeOj --- Repeated DNA Sequences 解题报告
- 【原创】leetCodeOj ---Construct Binary Tree from Preorder and Inorder Traversal 解题报告
- 【原创】leetCodeOj ---Convert Sorted List to Binary Search Tree 解题报告
- 【原创】leetCodeOj --- Word Ladder II 解题报告 (迄今为止最痛苦的一道题)
- 【原创】leetCodeOj --- Candy 解题报告
- 【原创】leetCodeOj --- Copy List with Random Pointer 解题报告
- 【原创】leetCodeOj ---Partition List 解题报告
- 【原创】leetCodeOj --- Majority Element 解题报告(脍炙人口的找n个元素数组中最少重复n/2次的元素)
- 【原创】leetCodeOj --- Interleaving String 解题报告
- 【原创】leetCodeOj --- Find Peak Element 解题报告
- UESTC 第五届ACM趣味程序设计竞赛第一场(热身赛,非原创题) 解题报告
- 【原创】poj ----- 2524 Ubiquitous Religions 解题报告
- 【原创】poj ----- 1611 The Suspects 解题报告