旋转有序数组的二分查找
2015-03-01 21:13
225 查看
将一个有序数组进行旋转,如0 1 2 4 5 6 7 -> 4 5 6 7 0 1 2,要求在旋转后的数组中查找某数,假定该数组中没有重复的数。
进一步,要求找到旋转数组中的最小值。
int find(int a[], int n, int k) { int left = 0; int right = n-1; while (left <= right) { int mid = left + (right-left)/2; if (k == a[mid]) { return mid; } if (a[left] <= a[mid]) { if (k < a[mid] && k >= a[left]) { right = mid - 1; } else { left = mid + 1; } } else { if (k <= a[right] && k > a[mid]) { left = mid + 1; } else { right = mid - 1; } } } return -1; }
进一步,要求找到旋转数组中的最小值。
int findMin(int a[], int n) { int left = 0; int right = n - 1; while (left < right) { int mid = left + (right-left)/2; if (a[mid] < a[right]) { right = mid; } else { left = mid + 1; } } return left; }
相关文章推荐
- 旋转有序数组的二分查找
- 在一个旋转过的有序数组上实现二分查找 收藏
- 循环有序数组/旋转数组的二分查找
- (二分查找思想)从有序递增旋转数组45679123 中找到数字6的位置
- (二分查找思想)从有序递增旋转数组45679123 中找到数字6的位置
- 在一个旋转过的有序数组上实现二分查找
- Search in Rotated Sorted Array 在旋转过的有序数组中进行二分查找 重点看解法二 三(重重)
- 旋转有序数组的二分查找
- 【leetcode】有重复的旋转排序数组查找(二分)
- 二分查找 —— 有序数组不小于(不大于)某数的第一个(最后一个)元素
- hiho1128 非有序数组的二分查找 (快速排序)
- 算法—8.有序数组中的二分查找
- 写一个函数,实现一个整形有序数组的二分查找。
- 有序数组转二分查找树的分治算法
- 有序 循环数组的二分查找
- [LeetCode]Median of Two Sorted Arrays 二分查找两个有序数组的第k数(中位数)
- 旋转数组的二分查找
- 剑指Offer面试题8旋转数组的最小数字(二分查找)附带快排和按年龄排序
- 实现有序列表(基于数组,二分查找)
- 二分查找变体之循环有序数组找分界点