题目

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

代码:oj测试通过 Runtime: 91 ms

 class Solution:
# @param A, a list of integers
# @param target, an integer to be searched
# @return a list of length 2, [index1, index2]
def searchAllTarget(self, A, index, target):
# left index
left_index = index
curr_index = index
while curr_index>=0 and A[curr_index]==target:
left_index = curr_index
curr_index = curr_index-1
# right index
right_index = index
curr_index = index
while curr_index<len(A) and A[curr_index]==target:
right_index = curr_index
curr_index = curr_index+1
return [left_index,right_index] def searchRange(self, A, target):
# none case
if A is None:
return None
# short length cases
if len(A)==1 :
return[[-1,-1],[0,0]][A[0]==target]
# binary search
start = 0
end = len(A)-1
while start<=end :
if start==end:
if A[start]==target :
return self.searchAllTarget(A, start, target)
else :
return [-1,-1]
if start+1==end :
if A[start]==target :
return self.searchAllTarget(A, start, target)
elif A[end]==target :
return self.searchAllTarget(A, end, target)
else :
return [-1,-1]
mid = (start+end)/2
if A[mid]==target :
return self.searchAllTarget(A, mid, target)
elif A[mid]>target :
end = mid-1
else :
start = mid+1

思路

这道题还是基于binary search,但是要求找到的是某个值的range。

分两步完成:

step1. 常规二分查找到target的某个index;如果没有找到则返回[-1,-1]

step2. 假设A中可能有多个位置为target,则从step1找到的index开始向左右search,直到把index左右两侧的target都找出来。

齐活儿

最新文章

  1. msdia80.dll文件出现在磁盘根目录下的解决方案
  2. jsp 中登录验证 注销 的模版
  3. 转:WCF、WebAPI、WCFREST、WebService之间的区别
  4. 第七课第三节,T语言流程语句(版本5.0)
  5. 养成好的JAVA编码习惯
  6. Windows7:Visual Studio 2008试用版的评估期已经结束解决方法
  7. static_cast、const_cast和reinterpret_cast学习
  8. python单元测试之unittest
  9. NSURLSessionDownloadTask 下载文件
  10. 最长回文(Manacher)
  11. jsp的标签库和自定义标签
  12. BZOJ第1页养成计划
  13. Codeforces 1065F(树形dp)
  14. 我的WafBypass之道(SQL注入篇)
  15. Atcoder Tenka1 Programmer Contest 2019 E - Polynomial Divisors
  16. .Net Core命令行配置-配置介绍
  17. jQuery change事件
  18. tf入门-卷积步长strides参数的具体解释
  19. python格式化输出、逻辑表达式和字符编码
  20. [转]Javascript 取小数点后面N位

热门文章

  1. Unity3D Shader性能排行
  2. LeetCode Search Insert Position (二分查找)
  3. 机器学习-octave使用
  4. H1ctf-Vote
  5. CentOS6.5-DHCP配置
  6. 【Java】基本数据类型以及其转换
  7. 在React中使用Redux数据流
  8. 【转】C++ 值传递、指针传递、引用传递详解
  9. HH的项链题解(离线思想+链表+树状数组)
  10. 【C++学习笔记】强大的算法——spfa