leetcode 二分查找
https://oj.leetcode.com/problems/search-for-a-range/就是一个二分查找,没事练练手
public class Solution {
public int[] searchRange(int[] A, int target) {
int a[]=new int[2];
int ans=bSearch(A,target);
if(ans==-1)
{
a[0]=-1;
a[1]=-1;
return a; }
else
{
int beg=ans;
int end=ans;
while(beg>=0&&(A[beg]==A[ans]))
{
beg--; }
while(end<A.length&&(A[end]==A[ans]))
{
end++;
}
a[0]=beg+1;
a[1]=end-1;
return a; } }
public int bSearch(int[] A,int target)
{
int low=0;
int high=A.length-1;
while(low<=high)
{
int mid =(low+high)/2;
if(A[mid]==target)
{
return mid; }
else if(A[mid]>target)
{ high=mid-1; }
else
{
low=mid+1;
} } return -1;
} }
2.另外一种二分查找 beg=0 end=len; end指向的是最后一个元素的后面,
public class Solution {
public int[] searchRange(int[] A, int target) {
int a[]=new int[2];
int ans=bSearch(A,target);
if(ans==-1)
{
a[0]=-1;
a[1]=-1;
return a; }
else
{
int beg=ans;
int end=ans;
while(beg>=0&&(A[beg]==A[ans]))
{
beg--; }
while(end<A.length&&(A[end]==A[ans]))
{
end++;
}
a[0]=beg+1;
a[1]=end-1;
return a; } }
public int bSearch(int[] A,int target)
{
int low=0;
int high=A.length;
while(low<high) //low<high不能等于
{
int mid =(low+high)/2;
if(A[mid]==target)
{
return mid; }
else if(A[mid]>target)
{ high=mid; }
else
{
low=mid+1;
} } return -1;
} }
3.第一种方法的递归方式
public class Solution {
public int[] searchRange(int[] A, int target) {
int a[]=new int[2];
int ans=bSearch(A,target,0,A.length);
if(ans==-1)
{
a[0]=-1;
a[1]=-1;
return a; }
else
{
int beg=ans;
int end=ans;
while(beg>=0&&(A[beg]==A[ans]))
{
beg--; }
while(end<A.length&&(A[end]==A[ans]))
{
end++;
}
a[0]=beg+1;
a[1]=end-1;
return a; } }
public int bSearch(int[] A,int target,int low,int high)
{ while(low<high)
{
int mid =(low+high)/2;
if(A[mid]==target)
{
return mid; }
else if(A[mid]>target)
{ bSearch(A,target,low,mid); }
else
{
bSearch(A,target,mid,high);
} } return -1;
} }
leetcode 二分查找的更多相关文章
- leetcode二分查找问题整理
自从做完leetcode上的三道关于二分查找的题后,我觉得它是比链表找环还恶心的题,首先能写出bugfree代码的人就不多,而且可以有各种变形,适合面试的时候不断挑战面试者,一个程序猿写代码解决问题的 ...
- [leetcode]二分查找总结
Search for a Range 1.最简单的想法,用最普通的二分查找,找到target,然后向左右扩张,大量的重复的target,就会出现O(n)效率. class Solution { pub ...
- leetcode 二分查找 Search in Rotated Sorted ArrayII
Search in Rotated Sorted Array II Total Accepted: 18500 Total Submissions: 59945My Submissions Follo ...
- Leetcode 二分查找 Search Insert Position
本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Search Insert Position Total Accepted: 14279 T ...
- leetcode 二分查找 Search in Rotated Sorted Array
Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ...
- LeetCode 二分查找模板 II
模板 #2: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...
- LeetCode 二分查找模板 I
模板 #1: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...
- LeetCode 二分查找模板 III
模板 #3: int binarySearch(vector<int>& nums, int target){ if (nums.size() == 0) return -1; i ...
- leetcode二分查找相关
目录 33/81搜索旋转排序数组 34在排序数组中查找元素的第一个和最后一个位置 35搜索插入位置 74搜索二维矩阵 300最长上升子序列,354俄罗斯套娃信封问题 33/81搜索旋转排序数组 假设按 ...
随机推荐
- c++ fstream中seekg()和seekp()的用法
转自:http://blog.sina.com.cn/s/blog_679f85d40100mysi.html 先说一下C语言中fseek()的功能: 函数原型:int fseek(FILE *fp, ...
- 无刷新分页 Ajax,JQuery,Json
1.数据库设计 字段:Id(int) , Msg(varchar(MAX)) , PostDate(datetime) 2.自定义SQL查询方法(强类型DataSet) //SelectCount() ...
- write() ,read();
int main1(int argc ,char *argv[]){ if(argc < 2 ) return 0; int fd = open(argv[1] , O_RDONLY); if( ...
- How to say all the keyboard symbols in English and Chinese
How to say all the keyboard symbols in English Symbol English 中文 ~ tilde 波浪号 ` grave accent, backquo ...
- jquery中onclick内$(this)指向
jquery中onclick=”fn”中$(this)所代表的对象 js方法 function qiehuan(){ var src = $(this).attr(“data”); alert($(t ...
- js初学必知三重点
这里列出了一些JS重要知识点(不全面,但自己感觉很重要).彻底理解并掌握这些知识点,对于每个想要深入学习JS的朋友应该都是必须的. 讲解还是以示例代码搭配注释的形式,这里做个小目录: JS代码预解析原 ...
- about hadoop-eclipse-plugin used by IDE
Apache Hadoop Development Tools (HDT) is still in development phase. So, no official distribution of ...
- osg学习笔记3 简单几何模型
osg::Geode (geometry node) osg::Geode类表示场景中的渲染几何叶节点,它包含了渲染用的几何信息,没有子节点. 要绘制的几何数据保存在osg::Geode管理的一组os ...
- c#中struct和class的区别 z
1.struct 是值类型,class是对象类型 2.struct 不能被继承,class可以被继承 3.struct 默认的访问权限是public,而class默认的访问权限是private. 4. ...
- windows 远程桌面连接ubuntu xrdp 只看到墙纸其他什么都没有
用 windows 的 mstsc 连接 ubuntu 的 xrdp 时,进入后只看到墙纸,其他什么都没有,鼠标指针也不见,输入按键都无反应. 原来 Ubuntu 启动了 3d 桌面,导致 xrdp ...