[LeetCode] Find Minimum in Rotated Sorted Array II
2017-08-10 10:31
281 查看
题目
Suppose an array sorted in ascending order 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.
找到最小元素。数组可能包含重复项。
分析
其实这就是一个循环有序数组,循环有序数组就是将一个有序数组切成两段,并交换位置。一个循环有序数组的最小元素就是其分界点,且一个循环有序数组从中间位置一分两半,可得到一个循环数组和一个有序数组。这样一来,主要的思路就是通过左边界元素和中间元素的大小关系判断循环部分在哪半边。
当左边界元素 > 中间元素,左边元素有序,循环部分在左半边。
当左边界元素 < 中间元素,左边元素有序,循环部分在右半边。
当左边界元素 = 中间元素,无法判断,因而移动一位,直到出现大小关系。
在判断该部分为循环部分时,发现其也为有序部分,该部分的起始值就是最小元素。
代码
#include <iostream> #include <vector> using namespace std; class Solution { public: int findMin(vector<int>& nums) { int start = 0, end = nums.size() - 1; while (start < end) { if (nums[start] < nums[end]) break; int mid = (start + end) / 2; if (nums[mid] < nums[start]) { end = mid; } else if (nums[mid] == nums[start]) { start++; } else { start = mid + 1; } } return nums[start]; } }; int main() { Solution solution; int num[] = {3, 3, 3, 3, 3, 0, 1, 2}; int length = sizeof(num) / sizeof(int); vector<int> nums(num, num + length); int min = solution.findMin(nums); cout << min << " is the smallest in array." << endl; }
参考资料
CSDN 博客:http://blog.csdn.net/linhuanmars/article/details/40449299相关文章推荐
- 【LeetCode-154】Find Minimum in Rotated Sorted Array II(C++)
- LEETCODE: Find Minimum in Rotated Sorted Array II
- leetcode--Find Minimum in Rotated Sorted Array II ---C++
- LeetCode "Find Minimum in Rotated Sorted Array II"
- LeetCode:Find Minimum in Rotated Sorted Array II
- Leetcode(12) - Find Minimum in Rotated Sorted Array II
- LeetCode Find Minimum in Rotated Sorted Array II
- leetcode(153 154) FindMinimuminRotatedSortedArray与FindMinimuminRotatedSortedArray II
- LeetCode 之 Find Minimum in Rotated Sorted Array II
- LeetCode(154) Find Minimum in Rotated Sorted Array II
- [LeetCode]Find Minimum in Rotated Sorted Array II
- LeetCode:Find Minimum in Rotated Sorted Array II
- Find Minimum in Rotated Sorted Array II(LeetCode)
- 【LeetCode】【Solution】Find Minimum in Rotated Sorted Array I & II
- [leetcode]Find Minimum in Rotated Sorted Array II
- Leetcode -- Find Minimum in Rotated Sorted Array II
- [LeetCode]Find Minimum in Rotated Sorted Array II
- leetcode 154 : Find Minimum in Rotated Sorted Array II
- [leetcode]Find Minimum in Rotated Sorted Array II @ Python
- LeetCode Find Minimum In Rotated Sorted Array II