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. vim 自動化配置

    Vim是Linux系統上常用的編輯器/Text Editor.不過很多人由於不瞭解如何配置,增加了很多煩惱. 今天介紹一個自動化的配置spf13,直接下載製作好的配置並進行自動設置. 1.官方的安裝步 ...

  2. Python中dict详解

    from:http://www.cnblogs.com/yangyongzhi/archive/2012/09/17/2688326.html Python中dict详解 python3.0以上,pr ...

  3. jquery 插件的编写

    /** * 插件的学习 * 原文地址:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html#home */ ;(function($, ...

  4. 诡异的XmlSerializer属性字段Specified

    自动生成代码时,往往会为一个字段假设为 * , 生成另一个bool型字段: *Specified: 如: [Serializable] public class A { [XmlElement] pu ...

  5. XStream简单使用01——xml和Ojbect互转

    package org.zhb.test; /** * author : zhb * data : 2014-2-14 * use packages: * xmlpull-1.1.3.1.jar * ...

  6. 使用Unidac内置连接池

    第一步: 放一个TUniconnection并设置相关属性 之后直接使用TUniconnection对象即可 跟踪unidac源码uni单元1540行中可以看到 Connect方法调用CreateIC ...

  7. [转]iOS之浅谈纯代码控制UIViewController视图控制器跳转界面的几种方法

    参考:http://www.mamicode.com/info-detail-469709.html 一.最普通的视图控制器UIViewContoller 一个普通的视图控制器一般只有模态跳转的功能( ...

  8. [简历] JAVA 软件工程师

    首先,一份好的简历不光说明事实,更通过FAB模式来增强其说服力. Feature:是什么 Advantage:比别人好在哪些地方 Benefit:如果雇佣你,招聘方会得到什么好处 其次,写简历和写议论 ...

  9. gulp 中的增量编译

    最近花一点时间学了下 gulp,顺便学了下 sass,因为工作中并不需要用(我比较希望学习是需求驱动),所以一直拖到现在才学.突然觉得学习这类工具性价比很高,半天一天即可上手,技能树丰富了(尽管可能只 ...

  10. SDWebImage 详解

    一.SDWebImage介绍 1.在项目的开发过程中,我们经常会用到异步加载图片的功能,先从网络上异步下载图片,然后通过UIImageView显示在屏幕上.这是一个经常使用的功能,基本上所有的联网应用 ...