博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[leetcode]Search for a Range
阅读量:4985 次
发布时间:2019-06-12

本文共 1876 字,大约阅读时间需要 6 分钟。

问题叙述性说明:

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

基本思路:

此题能够用二分查找法解决。

假设数组中没有target,能够在O(lgn)时间完毕。

假设数组中有target,当发现target后,对前后的内容继续用二分法 查找这种位置pos 。

  1. 前面的pos须要满足 A[pos] < target && A[pos+1] == target. pos+1即是開始位置。
  2. 后面的pos须要满足 A[pos] > target && A[pos-1] == target . pos-1是结束位置。

代码:

vector
searchRange(int A[], int n, int target) { //C++ vector
result(2); int low = 0, high = n-1; int mid, begin = -1, end = -1; while(low <= high) { mid = (low+high)/2; if(A[mid] > target) high = mid - 1; else if(A[mid] < target) low = mid + 1; else { begin = mid; end = mid; //get begin if(low <= begin -1){ while((low <= begin-1) && !(A[low]
= end+1){ while((high >= end+1) &&!(A[high]>target && A[high-1] == target)) { mid = (high + end +1)/2; if(A[mid] > target) high = mid - 1; else end = mid; } if(A[high]>target && A[high-1] == target) end = high - 1; } break; } } result[0] = begin; result[1] = end; return result; }

版权声明:本文博主原创文章,博客,未经同意不得转载。

转载于:https://www.cnblogs.com/yxwkf/p/4848858.html

你可能感兴趣的文章
Extjs中GridPanel的各个属性与方法
查看>>
2019春第六周作业
查看>>
ServiceFabric极简文档-1.3删除群集
查看>>
EXT2 文件系统(转)
查看>>
.NET - 代码重构技巧
查看>>
EasyUI - DataGrid 组建 - [ 搜索功能 ]
查看>>
Linux菜鸟起飞之路【七】文件合并、归档和压缩
查看>>
Redis设计与实现 -- 动态字符串对象(SDS)
查看>>
信息体系结构原则之二——有用性目标
查看>>
SQL 测试
查看>>
你了解栈溢出StackOverFloweExeption的原理吗?
查看>>
力扣(LeetCode)125. 验证回文串
查看>>
【转载】Eclipse快捷键
查看>>
RabbitMQ 集群
查看>>
关于docker
查看>>
Git的使用
查看>>
table表格设置边框线为单实线
查看>>
poj 2992 Divisors
查看>>
code review
查看>>
【摘录】Matrix学习——图像的复合变化
查看>>