leetcode-二分搜索:Search in Rotated Sorted Array

来源:互联网 发布:西安网络推广外包 编辑:程序博客网 时间:2024/06/16 04:44

题目介绍

在一个部分排序的数组中,查找目标值。部分排序的数组的形式如下

0,1,2,3,4,5,6,7->4,5,6,7,0,1,2

如果搜索到目标值则返回目标值的索引,否则返回-1

思路:

  • 首先找到临界的索引index,例如什么的例子中的临界索引为3
  • 判断目标值所在的区间是[0,index], 还是在[index+1, N]
  • 在含有目标值的区间内使用二分搜索

代码如下

/*************************************************************************    > File Name: bisearch.cpp    > Author: ma6174    > Mail: ma6174@163.com     > Created Time: 2015年07月13日 星期一 10时47分30秒 ************************************************************************/#include<iostream>#include<math.h>#include<stdlib.h>#include<stdio.h>#include<vector>#include<string>using namespace std;//33int search(vector<int>& nums, int tar){    int piv = 0;    int N = (int)nums.size() - 1;    for(piv = 0; piv < N; piv++)    {        if(nums[piv] > nums[piv + 1])            break;    }    int i, j;    if((nums[0] <= tar) && (nums[piv] >= tar))    {        i = 0;        j = piv;    }    if((nums[piv + 1] <= tar) && (nums[N] >= tar))    {        i = piv + 1;        j = N;    }    while(i <= j)    {        int mid = (i + j) / 2;        if(nums[mid] > tar)            j = mid - 1;        else if(nums[mid] < tar)            i = mid + 1;        else            return mid;    }    return -1;}int main(int arvc, char** argv){    int in = atoi(argv[1]);    vector<int> r;    r.push_back(4); r.push_back(5); r.push_back(6); r.push_back(7); r.push_back(0); r.push_back(1); r.push_back(2);    int id = search(r, in);    printf("id = %d\n", id);    return 0;}
0 0
原创粉丝点击