旋转数组中寻找最小值
来源:互联网 发布:300451 创业软件股吧 编辑:程序博客网 时间:2024/04/24 23:52
Find Minimum in Rotated Sorted Array
- 题目来源:
leetcode 153
int findMin(vector<int>& nums) { if (nums.size()==1||nums[0]<nums[nums.size()-1]) { //当nums[0]<nums[nums.size()-1]时,说明数组一开始就是递增的,所以返回第一个元素 return nums[0]; } int start = 0; int end = nums.size()-1; int mid; while ((end-start)>1) { //当end-start=1时终止,end所指的数就是最终答案 mid = (start+end)/2; if (nums[start]>nums[mid]) { //当nums[start]>nums[mid]说明在左半部分;也可能是mid所指,所以end=mid,而不是end=mid-1 end = mid; } else{ //当nums[start]<nums[mid]说明在右半部分;也可能是mid所指,所以start=mid,而不是start=mid-1 start=mid; } } return nums[end]; //最终返回end所指的数字}
二分查找总结
问题:到底start=mid,还是start=mid+1
end = mid,还是end=mid-1
到底循环条件是(start<=end)还是(start< end)还是(end-start)>1结论:
- 当所要找的位置在左边,或者右边但是不可能是mid所指的点的时候,使用start=mid+1(在右边区域,且不可能包含mid所指);end=mid-1(在左边区域,且不可能为mid所指);具体可以比较以下两个链接中的二分查找。
- 当start=mid+1,且end=mid-1来循环时;循环条件是(start<=end)
如:http://blog.csdn.net/hellotomhaha/article/details/54974443- 当一边包含mid,一边不包含mid时,循环条件(start< end)
如:http://blog.csdn.net/hellotomhaha/article/details/54985475- 当两边都不包含mid时,循环条件是(end-start)>1,如本题。
https://leetcode.com/submissions/detail/92511460/
0 0
- 旋转数组中寻找最小值
- 寻找旋转数组的最小值
- 寻找旋转数组中的最小值
- 寻找旋转数组的最小值
- 寻找旋转数组的最小值
- LintCode-寻找旋转排序数组中的最小值
- 题目:寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值
- LintCode 寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值
- LintCode-寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值 II
- 寻找旋转有序数组的最小值
- 寻找旋转排序数组中的最小值
- 寻找旋转排序数组中的最小值 II
- Linux Framebuffer驱动框架、接口实现和使用
- 自述创业史 - XMove动作感应系统(二)
- 1月28日
- metasploit基础使用
- |BZOJ 2330|差分约束|[SCOI2011]糖果
- 旋转数组中寻找最小值
- Mybatis接口注入失败问题
- Android View事件分发机制
- 新的C/C++学习路线
- 迟来的2016年总结
- cookie的作用和弊端
- js状态模式简单认识
- Algorithm 10
- 玩家捡起东西