Chinaunix首页 | 论坛 | 博客
  • 博客访问: 41133
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 372
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-12 23:27
文章分类

全部博文(37)

文章存档

2014年(5)

2013年(32)

我的朋友

分类: C/C++

2014-01-08 16:18:52

s,e,m分别是二分起,终,中
根据A[s]和A[m]关系确定s与m间是否发生了旋转,结合A[s]与target关系确定目标应在哪个区间

点击(此处)折叠或打开

  1. class Solution {
  2. public:
  3.     int search(int A[], int n, int target) {
  4.         int s=0;
  5.         int e=n-1;
  6.         int m=(s+e)/2;
  7.         
  8.         while(s<=e)
  9.         {
  10.             m=(s+e)/2;
  11.             if(A[m]==target) return m;
  12.             else if(A[m]<target)
  13.             {
  14.                 if(A[s]<=A[m])
  15.                 {
  16.                     s=m+1;
  17.                 }
  18.                 else
  19.                 {
  20.                     if(A[s]>target) s=m+1;
  21.                     else if(A[s]<target) e=m-1;
  22.                     else return s;
  23.                 }
  24.        
  25.             }
  26.             else if(A[m]>target)
  27.             {
  28.                 if(A[s]<=A[m])
  29.                 {
  30.                     if(A[s]<target) e=m-1;
  31.                     else if(A[s]>target) s=m+1;
  32.                     else return s;
  33.                 }
  34.                 else
  35.                 {
  36.                     e=m-1;
  37.                 }
  38.             }
  39.         }
  40.         return -1;
  41.     }
  42. };

阅读(103) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~