Find Minimum in Rotated Sorted Array && Find Minimum in Rotated Sorted Array II
2014-12-07 19:18
405 查看
Find Minimum in Rotated Sorted Array
我的思路:
1、在一个旋转数组中找到最小的那个数,只需要找到旋转的那个点就可以了。特殊情况没有旋转或者说旋转点在-1这个下标,返回num[0],如果只有一个数也返回num[0]。
2、由于没有重复的数,设定两个下标,从两头往中间找。当左边的值比右边小的时候停止循环。
3、如果begin == end,说明是奇数个数,我们要判断最中间的数是最大还是最小;如果不等于,说明是偶数个数或者已经错过,只需判断num[end]是在最大的 数还是最小的数。这里说得不清楚,应该有更好的判断方法。
代码如下:
别人思路:
1、二分明显是可以的,下面代码来自leetcode讨论区
Find Minimum in Rotated Sorted Array II
1、这题是Search in Rotated Sorted Array的基础题。只要找出最小的数就可以了。
2、对比第一个版本,改变了移动指针的方法。
我的代码:
别人思路:
1、依旧是可以利用二分查找的方法来做。
2、如果遇到num[mid]和num[end]一样的时候,不确定是在左边还是在右边,我们让end--。
代码如下:
有些时候问题出现新的情况的时候要考虑使用新的方法去解决,不能套用老方法。
我的思路:
1、在一个旋转数组中找到最小的那个数,只需要找到旋转的那个点就可以了。特殊情况没有旋转或者说旋转点在-1这个下标,返回num[0],如果只有一个数也返回num[0]。
2、由于没有重复的数,设定两个下标,从两头往中间找。当左边的值比右边小的时候停止循环。
3、如果begin == end,说明是奇数个数,我们要判断最中间的数是最大还是最小;如果不等于,说明是偶数个数或者已经错过,只需判断num[end]是在最大的 数还是最小的数。这里说得不清楚,应该有更好的判断方法。
代码如下:
int findMin(vector<int> &num) { if (num[0] <= num[num.size() - 1]) return num[0]; int begin = 0, end = num.size() -1; while (num[begin] > num[end]) { begin++; end--; } return num[(begin == end ? (num[begin - 1] < num[begin] ? begin : begin - 1) : (num[end] > num[end + 1] ? end : begin - 1)) + 1]; }
别人思路:
1、二分明显是可以的,下面代码来自leetcode讨论区
int findMin(vector<int> &num) { int lo = 0, hi = num.size() - 1; while(lo < hi){ int mid = (lo + hi) / 2; if (num[mid] > num[hi]) lo = mid + 1; else hi = mid; } return num[lo]; }
Find Minimum in Rotated Sorted Array II
1、这题是Search in Rotated Sorted Array的基础题。只要找出最小的数就可以了。
2、对比第一个版本,改变了移动指针的方法。
我的代码:
int findMin(vector<int> &num) { if (num.size() == 1) return num[0]; int begin = 0, end = num.size() - 1; while (num[begin] <= num[begin + 1] && num[end] >= num[end - 1] && end > 0) { begin++; end--; } int mid = end == 0 ? 0 : num[begin] > num[begin + 1] ? begin + 1 : end; return num[mid]; }
别人思路:
1、依旧是可以利用二分查找的方法来做。
2、如果遇到num[mid]和num[end]一样的时候,不确定是在左边还是在右边,我们让end--。
代码如下:
int findMin(vector<int> &num) { int begin = 0, end = num.size() - 1; int mid = (begin + end) / 2; while (begin < end) { if (num[mid] > num[end]) begin = mid + 1; else if (num[mid] < num[end]) end = mid; else end--; mid = (begin + end) / 2; } return num[mid]; }
有些时候问题出现新的情况的时候要考虑使用新的方法去解决,不能套用老方法。
相关文章推荐
- [leetCode] Find Minimum in Rotated Sorted Array I & II
- LeetCode.153(154) Find Minimum in Rotated Sorted Array && II
- [LeetCode]Find Minimum in Rotated Sorted Array I&II
- [Leetcode 153 && 154] Find Minimum in Rotated Sorted Array (II)
- Find Minimum in Rotated Sorted Array && Find Minimum in Rotated Sorted Array II
- [Leetcode]Find Minimum in Rotated Sorted Array I & II
- 154. Find Minimum in Rotated Sorted Array II & 153. Find Minimum in Rotated Sorted Array
- [LeetCode]Find Minimum in Rotated Sorted Array I&II
- Leetcode: Find Minimum in Rotated Sorted Array I & II (Java)
- 【LeetCode】【Solution】Find Minimum in Rotated Sorted Array I & II
- Find Minimum in Rotated Sorted Array I && II
- Find Minimum in Rotated Sorted Array I&&II——二分查找的变形
- Leetcode | Find Minimum in Rotated Sorted Array I && II
- 【leetcode】Find Minimum in Rotated Sorted Array I &II
- Find Minimum in Rotated Sorted Array I & II
- LeetCode Find Minimum in Rotated Sorted Array & LeetCode Find Minimum in Rotated Sorted Array II
- 【leetcode】Find Minimum in Rotated Sorted Array I & II (middle)
- 【leetcode】Find Minimum in Rotated Sorted Array I&&II
- [Leetcode]Find Minimum in Rotated Sorted Array I & II
- !leetcode[153 & 154]:Find Minimum in Rotated Sorted Array I & II