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].

题意:找出目标值在给定序列中起始和终止下标值。

思路:这题关键的是对时间复杂度限制为O(logn),所以,应该是二分查找算法的变形。刚开始,我还是想用一般的二分查找,找到等于目标值的下标了,然后向两边推进找到左右边界(此时,注意的下标)。但这种方法当重复的数字比较多的时,时间复杂度远不止O(logn),见代码一。

方法二,分别用二分查找找到这个序列的左右边界,即可。这个方法中值得注意的是,选取边界条件时,if语句中的条件判断。见代码二:

代码一:

 class Solution {
public:
vector<int> searchRange(int A[], int n, int target)
{
int lo=,hi=n;
while(lo<hi)
{
int mid=lo+(hi-lo)/;
if(A[mid]==target)
break;
else if(target<A[mid])
hi=mid;
else
lo=mid+;
}
if(A[mid] !=target)
return {-,-}; lo=mid,hi=mid;
while(lo>=&&A[lo]==target)
lo--;
while(hi<n&&A[hi]==target)
hi++; return {lo,hi};
}
};

参考了Grandyang的博客,代码二:

 class Solution {
public:
vector<int> searchRange(int A[], int n, int target)
{
vector<int> res(,-);
int lo=,hi=n; //找左边界
while(lo<hi)
{
int mid=lo+(hi-lo)/;
if(A[mid]<target)
lo=mid+;
else
hi=mid;
}
if(A[hi] !=target)
return res; res[]=hi; //右边界
hi=n;
while(lo<hi)
{
int mid=lo+(hi-lo)/;
if(target<A[mid])
hi=mid;
else
lo=mid+;
}
res[]=lo-;
return res;
}
};

最新文章

  1. manifest中读取&lt;meta-data&gt;
  2. win7下IE主页无法修改,IE设置无法保存解决方案
  3. AEAI Portal V3.5.2门户集成平台发版说明
  4. 【python cookbook】【数据结构与算法】16.筛选序列中的元素
  5. initWithFrame方法的理解
  6. Servlet 小试牛刀(doGet,doPost)
  7. Thinking In Web [原创作品]
  8. C++ 中 struct和class 的区别
  9. 2.5. Integer 16 、Integer 32、Integer 64(Core Data 应用程序实践指南)
  10. MySQL 5.7 多主一丛同步的数据库配置(将多处数据源合并到一点)
  11. 区分IE8 、IE9 、IE10的专属css hack
  12. gitlab的配置
  13. makefile编译错误情况整理
  14. C# 发送16进制串口数据
  15. python 操作剪切板
  16. platform 系统是windows还是liunx
  17. “C++动态绑定”相关问题探讨
  18. blender, knife工具
  19. [笔记]Delphi 2007写DLL供VC调用实例
  20. goland 使用简单配置-不断更新

热门文章

  1. Qt Creator 下启动vim模式后,运行快捷键Ctrl+R失效解决方案
  2. C#使用EF连接PGSql数据库
  3. vim python自动补全插件:pydiction
  4. post接口_ajax上传
  5. 孤荷凌寒自学python第八十三天初次接触ocr配置tesseract环境
  6. Click Once使用总结
  7. STM32串口通信UART使用
  8. HDU 4300 Clairewd’s message (next函数的应用)
  9. 最短路径——Dijkstra(简易版)
  10. 在64位的环境下利用Jet来操作Access,Excel和TXT