【leetcode】34Search for a Range(二分搜索上下界)
来源:互联网 发布:网络棋牌游戏算赌博吗 编辑:程序博客网 时间:2024/06/06 02:07
题目大意:给出一排好序的整型数组,给定一个目标值,如果数组中有目标值,则要求返回目标值下标范围,例如:[5, 7, 7, 8, 8, 10],目标值为8,函数应当返回[3,4],如果数组中没有目标值,则返回[-1,-1],要求时间复杂度O(logn)
题目解法:数组有序显然会想到二分查找,二分查找不仅可以找到准确的值的位置也可以找到边界位置(如第一个大于等于某值或小于等于某值的位置),在本题中我们需要找到第一个等于目标值的位置以及最后一个等于目标值的位置,可以分两次分别查找
查找第一个等于目标值的位置:
每次将中点值与目标值比较,若小于目标值说明第一个目标值位置应在mid右边,left=mid+1,否则第一个目标值位置应在mid左边(不能排除mid),right=mid
其中求中间位置写成mid=left+(right-left)/2而不是mid=(left+right)/2是为了防止溢出
while(left<right){mid=left+(right-left)/2;if(nums[mid]<target) left=mid+1;else right=mid;}
查找最后一个目标值的位置:
与前面的相似,将中点值与目标值比较,若大于目标值,则说明最后一个目标值在mid左边,right=mid-1,其他情况则说明最后一个目标值在mid右边(不能排除mid)left=mid
特别注意求中间位置要写成mid=left+(right-left+1)/2,这是因为当left+1=right时,若按照原有写法,无论中间位置的值与目标值是什么关系,都无法跳出循环,最终形成死循环
while(left<right){mid=left+(right-left+1)/2;if(nums[mid]>target) right=mid-1;else left=mid;}
这道题总的代码如下
0 0
- 【leetcode】34Search for a Range(二分搜索上下界)
- Leetcode 34 - search for a Range(二分)
- LeetCode 34 Search for a Range(搜索范围)
- 二分搜索 34. Search for a Range
- 34. Search for a Range-二分搜索
- Leetcode 34 Search for a Range (二分搜索 lower_bound和upper_bound)
- leetcode:Search for a Range 二分查找
- leetcode 二分查找 Search for a Range
- leetcode-二分查找:Search for a range
- LeetCode(34)Search for a Range
- LeetCode (34)Search for a Range
- LeetCode 34. Search for a Range(搜索范围)
- 二分搜索——34. Search for a Range
- leetcode 34. Search for a Range-数组边界|二分查找
- 34.leetcode Search for a Range(meidum)[二分查找]
- [leetcode-二分查找]--34. Search for a Range
- leetcode 34. Search for a Range 二分查找
- leetcode 34. Search for a Range (二分查找)
- Apache配置反向代理、负载均衡和集群(mod_proxy方式) 经典
- java中间件
- A quick CSS layout library
- hive order by,sort by,distributed by
- 数据结构与算法:字符串
- 【leetcode】34Search for a Range(二分搜索上下界)
- easyui-combobox添加onChange事件
- Android studio 中查看sha1值的方法
- Spring MVC 上传文件(upload files)
- The Structure of an MPEG-DASH MPD(译)
- Spring MVC拦截器+注解方式实现防止表单重复提交
- Remove Linked List Elements 链表元素的删除
- android 仿淘宝、京东商品详情页 向上拖动查看图文详情控件
- optimization