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搜索旋转排序数组 假设按 ...
随机推荐
- bzoj1007:[HNOI2008]水平可见直线
思路:首先按斜率排序,如果斜率相同就取截距最大的,显然截距小的会被覆盖而对答案没有贡献,然后考虑斜率不同的如何统计答案,可以用一个单调栈维护,当前新插入的直线显然斜率是要比当前栈顶斜率要大的,然后如果 ...
- 现代密码学应用的范例-PGP
PGP(Pretty Good Privacy),是一个基于RSA公钥加密体系的邮件加密软件. 产生背景: 电子邮件在传输中使用SMTP协议存在这样的问题 1.无法保证邮件在传输过程中不被人偷看 2. ...
- clr介绍
CLR(公用语言运行时)和Java虚拟机一样也是一个运行时环境,它负责资源管理(内存分配和垃圾收集),并保证应用和底层操作系统之间必要的分离..NET提供了一个运行时环境,叫做公用语言运行时(Comm ...
- CSS三角形广告文字
街上经常碰到一些发各类广告传单的,有一次收到一张房地产广告的传单,顺手留下来,看着里面有些广告挺吸引人,同时也想练练自己css技术,故抽空做了一下. 原图某区域如下: 实现上图效果是需要一些想象力的, ...
- word中几个好用的宏代码(立方米上标、关闭样式自动更新、删除无效样式、表格加粗边框、宋体引号)
Sub 替换立方米() With Selection.Find .Text = "m3" .Replacement.Text = "mm3" .Forward ...
- whoosh使用笔记
1. whoosh安装 pip install Whoosh 2. 添加索引 第一步:生成schema 第二步:根据schema生成index.index就是一个目录中的一堆文件 (针对某个目录,调 ...
- Qt之json解析
Jsoner::Jsoner(QObject *parent) : QObject(parent){ QJsonObject json; json.insert("loginna ...
- hdu-A+B问题,大数加法
格式问题很头疼啊 Input The first line of the input contains an integer T(1<=T<=20) which means the num ...
- ~/.vimrc config
runtime! debian.vim "设置编码 set encoding=utf- set fencs=utf-,ucs-bom,shift-jis,gb18030,gbk,gb2312 ...
- MyEclipse配置多个WEB容器
MyEclipse支持多个同版本WEB容器同时运行 打开 然后按下图操作 咱们就得到了 下面需要配置新增加WEB容器的启动路径,在新增加的WEB容器上点击右键,选择箭头指向的菜单 打开的窗口如图,可以 ...