寻找旋转排序数组中的最小值 II
2018-01-04 21:15
330 查看
假设一个旋转排序的数组其起始位置是未知的(比如0 1 2 4 5 6 7 可能变成是4 5 6 7 0 1 2)。
你需要找到其中最小的元素。
数组中可能存在重复的元素。
我的想法是:
遍历数组来进行的查找,效率不高但是通过了测试。
int findMin(vector<int> nums) {
// write your code here
int num = nums.size();
if(num == 1)
return nums[0];
for(int i = 0 ; i < num-1 ; i ++){
if(nums[i] > nums[i+1])
return nums[i+1];
}
return nums[0];
}
答案:
因为是已经基本上排好序的数组,因此使用二分法会很有效果。相当于使用二分法来找一个特别的数。
但是是如何判断是去调查中点右边数组还是左边数组?
因为数组分两段,我要找原来在前面现在放在了后面的数组小段,这个数组小段的特点就是一定都小于数组的结尾节点。通过这个结尾节点来判断中点节点是处于那一个小段以及应该如何选择左右。
需要注意的就是:如果相等时的hi-- 例如:1,1,-1,1就需要这样去--;
int findMin(vector<int> &num) {
// write your code here
int lo = 0;
int hi = num.size()-1;
while(lo<hi){
int mid = lo + (hi - lo)/2;
if(num[mid]>num[hi]){
lo = mid+1;
}else if(num[mid]<num[hi]){
hi = mid;
}else{
hi--;
}
}
return num[lo];
}
你需要找到其中最小的元素。
数组中可能存在重复的元素。
我的想法是:
遍历数组来进行的查找,效率不高但是通过了测试。
int findMin(vector<int> nums) {
// write your code here
int num = nums.size();
if(num == 1)
return nums[0];
for(int i = 0 ; i < num-1 ; i ++){
if(nums[i] > nums[i+1])
return nums[i+1];
}
return nums[0];
}
答案:
因为是已经基本上排好序的数组,因此使用二分法会很有效果。相当于使用二分法来找一个特别的数。
但是是如何判断是去调查中点右边数组还是左边数组?
因为数组分两段,我要找原来在前面现在放在了后面的数组小段,这个数组小段的特点就是一定都小于数组的结尾节点。通过这个结尾节点来判断中点节点是处于那一个小段以及应该如何选择左右。
需要注意的就是:如果相等时的hi-- 例如:1,1,-1,1就需要这样去--;
int findMin(vector<int> &num) {
// write your code here
int lo = 0;
int hi = num.size()-1;
while(lo<hi){
int mid = lo + (hi - lo)/2;
if(num[mid]>num[hi]){
lo = mid+1;
}else if(num[mid]<num[hi]){
hi = mid;
}else{
hi--;
}
}
return num[lo];
}
相关文章推荐
- 寻找旋转排序数组中的最小值 II
- lintcode-160-寻找旋转排序数组中的最小值 II
- LintCode-分治-寻找旋转排序数组中的最小值 II
- 寻找旋转排序数组中的最小值 II -LintCode
- 寻找旋转排序数组中的最小值 II
- LintCode-寻找旋转排序数组中的最小值 II
- lintcode:寻找旋转排序数组中的最小值 II
- 题目:寻找旋转排序数组中的最小值 II
- 寻找旋转排序数组中的最小值 II
- lintcode --寻找旋转排序数组中的最小值 II
- 寻找旋转排序数组中的最小值 II
- 寻找旋转排序数组中的最小值
- lintcode-寻找旋转排序数组中的最小值 java 需复习
- 寻找旋转排序数组中的最小值
- [LeetCode] Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值之二
- 寻找旋转排序数组中的最小值——LintCode
- lintcode- 寻找旋转排序数组中的最小值-159
- 寻找旋转数组中最小的数I和II
- LeetCode-Find Minimum in Rotated Sorted Array II-旋转排序数组找最小-二分查找
- [LeetCode] 154. Find Minimum in Rotated Sorted Array II 寻找旋转有序数组的最小值 II