(二分查找思想)从有序递增旋转数组45679123 中找到数字6的位置
来源:互联网 发布:c书籍推荐知乎 编辑:程序博客网 时间:2024/05/17 07:08
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
using namespace std;
/**
* 从有序递增旋转数组45679123 中找到数字6的位置
* 数组递增 但有旋转
* 二分查找思想
* 时间复杂度小于O(N)
* {7,8,9,10,1,2,3,4,5,6}
*************/
int find_revolve_array(const int arr[], int len, int value)
{
if (NULL == arr || len < 0)
{
throw exception("Invalid input");
return 0;
}
int left = 0;
int right = len - 1;
int mid = -1;
while (left <= right)
{
mid = (left - right) / 2 + right; // 不要用 left / 2 + right / 2 因为(5 + 7)/2 = 6 而 (5/2 + 7/2) = 5
// 9/2 + 9/2 = 8 遇不见最后一个数 可能死循环
if (arr[mid] == value)
{
return mid;
}
else if (value < arr[mid])
{
if (value >= arr[left]) // 在左边
{
right = mid -1;
}
else // 在右边
{
left = mid + 1;
}
}
else
{
if (value <= arr[right])
{
left = mid + 1;
}
else
{
right = mid - 1;
}
}
}
return -1;
}
void test()
{
int arr[] = {7,8,9,10,1,2,3,4,5,6};
int index = find_revolve_array(arr, 10, 7);
}
int main()
{
test();
return 0;
}
本文出自 “城市猎人” 博客,请务必保留此出处http://alick.blog.51cto.com/10786574/1772623
- (二分查找思想)从有序递增旋转数组45679123 中找到数字6的位置
- 递增有序数组中,查找某一个数字的位置
- 在有序递增数组中查找一个缺少的数字
- 旋转有序数组的二分查找
- 旋转有序数组的二分查找
- 旋转有序数组的二分查找
- 二分查找思想寻找有序数组中查找最小值
- 从有序数组中查找某个值(二分)
- 二分查找(有序数组中查找需要的数)
- 可以在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.(折半查找)
- 循环有序数组/旋转数组的二分查找
- 旋转有序的二分查找
- 在有序旋转数组中找到最小值
- 在有序旋转数组中找到最小值
- 用折半查找法在整型有序数组中查找想要的数字,找到了返回下标,找不到返回-1.
- 二分搜索——在有序数组中找到目标函数出来的最左端的位置
- 有序数组的二分查找
- 有序数组的二分查找
- 稀疏矩阵-压缩存储-列转置法- 一次定位快速转置法
- Mysql varchar VS Oracle varchar2
- OGNL
- C++ 数据结构 广义表
- 栈和队列 相关 面试题
- (二分查找思想)从有序递增旋转数组45679123 中找到数字6的位置
- android缓存清理
- Linux 常见环境变量、文件类型、权限管理
- JavaWeb学习之注册登录功能实现过程中出现的问题及解决
- JDK1.8新特性--之默认接口
- Linux 中find命令与文件权限
- 记录前端学习的过程中值得收藏的文章
- linux下mysql启动问题
- Vim(Linux编辑器)简单配置和常用命令