查找已排序的旋转后的数组中的数(Search in Rotated Sorted Array)
来源:互联网 发布:c语言制作俄罗斯方块 编辑:程序博客网 时间:2024/05/11 17:06
题目如下:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7
might become 4 5 6 7 0 1 2
).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
分析:此题最简单的方法就是一个个比较,复杂度O(N),但这样就没有利用分段排序这个条件。我的想法是先用二分搜索将数组分成两个已排序的数组,再在这两个数组上查找,这样算法复杂度为O(lgN)+max(O(lgM)+O(lg(N-M))),其中0<M<N
代码如下:
int findmax(int A[], int n){
int max=A[0];
int i=0,j=n-1,m=i+(j-i)/2+1;
while(i!=j)
{
if(max<A[m])
{
i=m;
max=A[m];
}
if(max>A[m])j=m-1;
m=i+(j-i)/2+1;
}
return i;
}
int binarysearch(int A[], int n, int target)
{
int i=0,j=n-1,m=i+(j-i)/2;
while(i<=j)
{
if(target==A[m])break;
if(target<A[m])j=m-1;
if(target>A[m])i=m+1;
m=i+(j-i)/2;
}
if(i<=j)return m;
return -1;
}
int search(int A[], int n, int target) {
if(n<=0)return -1;
int position=findmax(A,n);
int result=binarysearch(A, position+1, target);
if(result!=-1)return result;
if(n>position+1)
{
result=binarysearch(A+position+1, n-position-1, target);
if(result!=-1)return result+position+1;
}
return -1;
}
- 查找已排序的旋转后的数组中的数(Search in Rotated Sorted Array)
- Search in Rotated Sorted Array-旋转数组的查找
- leetCode 33.Search in Rotated Sorted Array(排序旋转数组的查找) 解题思路和方法
- Leetcode--Search in Rotated Sorted Array(旋转数组的查找)
- LeetCode OJ 之 Search in Rotated Sorted Array (有序数组翻转后的查找)
- 数组-Search in Rotated Sorted Array(在一个旋转的数组中查找想要的值的指针)
- Array----- 153. Find Minimum in Rotated Sorted Array(查找旋转后的有序数组中最小值)
- LeetCode Search in Rotated Sorted Array 在旋转了的数组中查找
- Search in Rotated Sorted Array 在旋转的数组中查找元素
- Search in Rotated Sorted Array II 旋转的数组中查找,有重复元素
- 【LeetCode刷题】旋转数组的查找 Search in Rotated Sorted Array
- LeetCode @ Search in Rotated Sorted Array 旋转数组查找
- 33. Search in Rotated Sorted Array 旋转排序数组极值的二分求法
- Search in Rotated Sorted Array 旋转数组里查找数 @LeetCode
- [LintCode] 搜索旋转排序数组 Search in Rotated Sorted Array
- 【LeetCode-面试算法经典-Java实现】【081-Search in Rotated Sorted Array II(搜索旋转的排序数组)】
- 排序旋转数组查找(Search in a sorted, rotated list)
- leetcode 刷题之路 35 Search in Rotated Sorted Array II (旋转排序数组查找终极版)
- android线程
- OpenStack-Cinder创卷代码走读(Grizzly)中
- 采集linux进程资源SHELL例子
- Python --万物皆对象
- Java类加载器总结
- 查找已排序的旋转后的数组中的数(Search in Rotated Sorted Array)
- java IO 流加密解密小例子
- sizeof空结构体长度
- OpenStack-Cinder创卷代码走读(Grizzly)下
- 音频采样概念
- 基于HTML5的轻量级图像处理引擎Demo
- Java中提供了抽象类的语法
- 微软平台zip压缩后unix解压后文件名乱码
- 字符集、字符编码与HTTP编码解码之万象