二分查找——34。在排序数组中查找元素的第一个和最后一个位置

  

给定一个按照升序排列的整数数组num,和一个目标值目标。找出给定目标值在数组中的开始位置和结束位置。

  

你的算法时间复杂度必须是O (log n)级别。

  

如果数组中不存在目标值,返回[1].

  

示例1:

  

输入:num=(5、7、7、8、8、10],目标=8
输出:[3,4]

  

代码实现

  <人力资源/>   
 <代码>{类解决方案
  公众:
  int left_index (vector和num, int目标)
  {
  int开始=0;
  int结束=nums.size () - 1;
  而(开始& lt;=结束)
  {
  int中期=(开始+结束)/2;
  如果(num(中期)==目标)
  {
  如果(中期==0 | | num[1]中期& lt;目标)
  {
  返回中期;
  }
  中期结束=1;
  }
  else if(目标& lt;num[中])
  {
  中期结束=1;
  }
  else if(目标比;num[中])
  {
  中期开始=+ 1;
  }
  }
  返回1;
  }
  int right_index (vector和num, int目标)
  {
  int开始=0;
  int结束=nums.size () - 1;
  而(开始& lt;=结束)
  {
  int中期=(开始+结束)/2;
  如果(num(中期)==目标)
  {
  如果(==nums.size中期()- 1 | | num[中期+ 1]比;目标)
  {
  返回中期;
  }
  中期开始=+ 1;
  }
  else if(目标& lt;num[中])
  {
  中期结束=1;
  }
  else if(目标比;num[中])
  {
  中期开始=+ 1;
  }
  }
  返回1;
  }
  vectorsearchRange (vector和num int目标){
  vector结果;
  result.push_back (left_index (num、目标));
  result.push_back (right_index (num、目标));
  返回结果;
  }
  }; 

二分查找——34。在排序数组中查找元素的第一个和最后一个位置