Chinaunix首页 | 论坛 | 博客
  • 博客访问: 358238
  • 博文数量: 60
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 1138
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-20 16:18
个人简介

最多140个字

文章分类

全部博文(60)

文章存档

2016年(1)

2015年(34)

2014年(25)

分类: C/C++

2015-07-28 20:12:37

Given a sorted array of integers, find the starting and ending position of a given target value.

Your algorithm's runtime complexity must be in the order of O(log n).

If the target is not found in the array, return [-1, -1].

For example,
Given [5, 7, 7, 8, 8, 10] and target value 8,
return [3, 4].


点击(此处)折叠或打开

  1. /**
  2.  * Return an array of size: *returnSize.
  3.  * Note: The returned array must be malloced, assume caller calls free().
  4.  */
  5. int* searchRange(int* nums, int numSize, int target, int* returnSize) {
  6.     *returnSize=2;
  7.     int* ret=(int*)malloc(sizeof(int)*2);
  8.     ret[0]=ret[1]=-1;
  9.     int i=0;
  10.     int j=numSize-1;
  11.     int hit=-1;
  12.     while(i<=j)
  13.     {
  14.         int mid=i+(j-i)/2;
  15.         if(nums[j]<target)
  16.             break;
  17.         if(nums[mid]>=target)
  18.         {
  19.             if(nums[mid]==target)
  20.                 hit=mid;
  21.             j=mid-1;
  22.         }
  23.         else
  24.             i=mid+1;
  25.     }

  26.     if(hit==-1)
  27.         return ret;
  28.     else
  29.         ret[0]=hit;
  30.     
  31.     i=hit;
  32.     j=numSize-1;
  33.     hit=-1;
  34.     while(i<=j)
  35.     {
  36.         int mid=i+(j-i)/2;
  37.         if(nums[i]>target)
  38.             break;
  39.         if(nums[mid]>target)
  40.             j=mid-1;
  41.         else
  42.         {
  43.             if(nums[mid]==target)
  44.                 hit=mid;
  45.             i=mid+1;
  46.         }
  47.     }
  48.     if(hit==-1)
  49.         return ret;
  50.     else
  51.         ret[1]=hit;
  52.     return ret;
  53. }

阅读(1901) | 评论(0) | 转发(0) |
0

上一篇:Word Frequency

下一篇:Insertion Sort List

给主人留下些什么吧!~~