Search for a Range

1.最简单的想法,用最普通的二分查找,找到target,然后向左右扩张,大量的重复的target,就会出现O(n)效率。

 class Solution {
public int[] searchRange(int[] A, int target) {
int ans[]=new int[];
int a= bserch(A,target);
if(a==-) {ans[]=-;ans[]=-; return ans;}
//left
int b=a-;
while(b>=&&A[b]==target) b--;
ans[]=b+;
b=a+; while(b<=A.length-&&A[b]==target) b++;
ans[]=b-;
return ans; } public int bserch(int A[],int target)
{
int low=;
int end=A.length-;
while(low<=end)
{
int mid=(low+end)>>;
if(A[mid]==target) return mid;
else if(A[mid]<target) low=mid+;
else end=mid-; } return -;
} }

2.二分查找加入第一个大的位置(上届),第一个大于等于它的位置(下界)

  class Solution {
public int[] searchRange(int[] A, int target) {
int ans[]=new int[2];
int a= bserch(A,target);
if(a==-1) {ans[0]=-1;ans[1]=-1; return ans;}
//left
int b=a-1;
while(b>=0&&A[b]==target) b--;
ans[0]=b+1;
b=a+1; while(b<=A.length-1&&A[b]==target) b++;
ans[1]=b-1;
return ans; }
//其实难点就是A[mid]==target,如何调整low和high
public int bserch(int A[],int target)
{
int low=0;
int end=A.length-1;
while(low<=end)
{
int mid=(low+end)>>1;
if(A[mid]==target) return mid;
else if(A[mid]<target) low=mid+1;
else end=mid-1; } return -1;
}
//第一个大于target的
public int upperbound(int A[],int target) // the first one larger than target
{
int low=0;
int end=A.length-1;
while(low<=end)
{
int mid=(low+end)>>1;
if(A[mid]>target) end=mid-1;
else low=mid+1; }
return low;
}
public int lowbound(int A[],int target) // the first one larger or equal target
{
int low=0;
int end=A.length-1;
while(low<=end)
{
int mid=(low+end)>>1;
if(A[mid]>=target) end=mid-1;
else low=mid+1; }
return low;
} }

[leetcode]二分查找总结的更多相关文章

  1. leetcode二分查找问题整理

    自从做完leetcode上的三道关于二分查找的题后,我觉得它是比链表找环还恶心的题,首先能写出bugfree代码的人就不多,而且可以有各种变形,适合面试的时候不断挑战面试者,一个程序猿写代码解决问题的 ...

  2. leetcode 二分查找

    https://oj.leetcode.com/problems/search-for-a-range/就是一个二分查找,没事练练手 public class Solution { public in ...

  3. leetcode 二分查找 Search in Rotated Sorted ArrayII

    Search in Rotated Sorted Array II Total Accepted: 18500 Total Submissions: 59945My Submissions Follo ...

  4. Leetcode 二分查找 Search Insert Position

    本文为senlie原创,转载请保留此地址:http://blog.csdn.net/zhengsenlie Search Insert Position Total Accepted: 14279 T ...

  5. leetcode 二分查找 Search in Rotated Sorted Array

    Search in Rotated Sorted Array Total Accepted: 28132 Total Submissions: 98526My Submissions Suppose ...

  6. LeetCode 二分查找模板 II

    模板 #2: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...

  7. LeetCode 二分查找模板 I

    模板 #1: int binarySearch(vector<int>& nums, int target){ if(nums.size() == 0) return -1; in ...

  8. LeetCode 二分查找模板 III

    模板 #3: int binarySearch(vector<int>& nums, int target){ if (nums.size() == 0) return -1; i ...

  9. leetcode二分查找相关

    目录 33/81搜索旋转排序数组 34在排序数组中查找元素的第一个和最后一个位置 35搜索插入位置 74搜索二维矩阵 300最长上升子序列,354俄罗斯套娃信封问题 33/81搜索旋转排序数组 假设按 ...

随机推荐

  1. TFTPD32, 3CDaemon, FlashFxp

    TFTPD32, 3CDaemon, FlashFxp ——各种网络传输下载工具简介—— 一.将3CDaemon.exe作为TFTP服务端,开发板作为TFTP客户端 1.如上图所示,设置好3CDaem ...

  2. c++ primer复习(三)

    1 istream.ostream类型,cin.cout.cerr是istream或ostream类型的具体的对象,<<和>>是操纵符 getline函数的参数是istream ...

  3. Mac apache配置问题解决

    AH00526: Syntax error on line 20 of /private/etc/apache2/extra/httpd-mpm.conf: Invalid command 'Lock ...

  4. android程序的安装与卸载

    Android android在安装应用程序与卸载应用程序时都会发送广播,安装应用程序成功时会发送android.intent.action.PACKAGE_ADDED广播,可以通过intent.ge ...

  5. javascript 单行向上滚动文字

    <html><head><meta http-equiv="Content-Type" content="text/html; charse ...

  6. PHP文件下载方式

    <?php// 不能是中文目录,其实如果是 .rar, .zip 类的这些文件,直接连接就可以下载了!function download($file_dir,$file_name)//参数说明: ...

  7. JSP页面的五种跳转方法

    ①RequestDispatcher.forward() 是在服务器端起作用,当使用forward()时,Servlet engine传递HTTP请求从当前的Servlet or JSP到另外一个Se ...

  8. 堆排序 海量数据求前N大的值

    最(大)小堆的性质: (1)是一颗完全二叉树,遵循完全二叉树的所有性质. (2)父节点的键值(大于)小于等于子节点的键值 堆的存储 一般都用数组来表示堆,i结点的父结点下标就为(i – 1) / 2. ...

  9. Codeforces Round #198 (Div. 2) —— D

    昨天想了一下D题,有点思路不过感觉很麻烦,就懒得去敲了: 今天上午也想了一下,还是没有结果,看了一下官方题解,证明得很精彩: 这道题目其实就是一道裸地最大上升子序列的题: 看到这里,直接怒码···· ...

  10. Swift初体验之图案锁

    这篇在应用上貌似没有价值,貌似我写了好多实际上都没有价值,这里贴出来就是分享下. 自己写swift好多天了,感觉好多东西还是不太懂,边学边做,互勉! 先上图: 代码:下载