zoukankan      html  css  js  c++  java
  • leetcode 二分查找

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

     1 public class Solution {
     2     public int[] searchRange(int[] A, int target) {
     3         int a[]=new int[2];
     4         int ans=bSearch(A,target);
     5         if(ans==-1)
     6         {
     7             a[0]=-1;
     8             a[1]=-1;
     9             return a;
    10             
    11         }
    12         else
    13         {
    14             int beg=ans;
    15             int end=ans;
    16             while(beg>=0&&(A[beg]==A[ans]))
    17             {
    18                 beg--;
    19                 
    20             }
    21             while(end<A.length&&(A[end]==A[ans]))
    22             {
    23                 end++;
    24             }
    25             a[0]=beg+1;
    26             a[1]=end-1;
    27             return a;
    28             
    29         }
    30         
    31         
    32         
    33     }
    34     public int bSearch(int[] A,int target)
    35     {
    36         int low=0;
    37         int high=A.length-1;
    38         while(low<=high)
    39         {
    40             int mid =(low+high)/2;
    41             if(A[mid]==target)
    42             {
    43                 return mid;
    44                 
    45             }
    46             else if(A[mid]>target)
    47             {
    48                 
    49                
    50                 high=mid-1;
    51                 
    52             }
    53             else
    54             {
    55                 low=mid+1;
    56             }
    57             
    58             
    59             
    60         }
    61         
    62         return -1;
    63     }
    64     
    65     
    66     
    67 }

    2.另外一种二分查找 beg=0 end=len;  end指向的是最后一个元素的后面,

     1 public class Solution {
     2     public int[] searchRange(int[] A, int target) {
     3         int a[]=new int[2];
     4         int ans=bSearch(A,target);
     5         if(ans==-1)
     6         {
     7             a[0]=-1;
     8             a[1]=-1;
     9             return a;
    10             
    11         }
    12         else
    13         {
    14             int beg=ans;
    15             int end=ans;
    16             while(beg>=0&&(A[beg]==A[ans]))
    17             {
    18                 beg--;
    19                 
    20             }
    21             while(end<A.length&&(A[end]==A[ans]))
    22             {
    23                 end++;
    24             }
    25             a[0]=beg+1;
    26             a[1]=end-1;
    27             return a;
    28             
    29         }
    30         
    31         
    32         
    33     }
    34     public int bSearch(int[] A,int target)
    35     {
    36         int low=0;
    37         int high=A.length;
    38         while(low<high)  //low<high不能等于
    39         {
    40             int mid =(low+high)/2;
    41             if(A[mid]==target)
    42             {
    43                 return mid;
    44                 
    45             }
    46             else if(A[mid]>target)
    47             {
    48                 
    49                
    50                 high=mid;
    51                 
    52             }
    53             else
    54             {
    55                 low=mid+1;
    56             }
    57             
    58             
    59             
    60         }
    61         
    62         return -1;
    63     }
    64     
    65     
    66     
    67 }

    3.第一种方法的递归方式

     1 public class Solution {
     2     public int[] searchRange(int[] A, int target) {
     3         int a[]=new int[2];
     4         int ans=bSearch(A,target,0,A.length);
     5         if(ans==-1)
     6         {
     7             a[0]=-1;
     8             a[1]=-1;
     9             return a;
    10             
    11         }
    12         else
    13         {
    14             int beg=ans;
    15             int end=ans;
    16             while(beg>=0&&(A[beg]==A[ans]))
    17             {
    18                 beg--;
    19                 
    20             }
    21             while(end<A.length&&(A[end]==A[ans]))
    22             {
    23                 end++;
    24             }
    25             a[0]=beg+1;
    26             a[1]=end-1;
    27             return a;
    28             
    29         }
    30         
    31         
    32         
    33     }
    34     public int bSearch(int[] A,int target,int low,int high)
    35     {
    36        
    37         while(low<high)
    38         {
    39             int mid =(low+high)/2;
    40             if(A[mid]==target)
    41             {
    42                 return mid;
    43                 
    44             }
    45             else if(A[mid]>target)
    46             {
    47                 
    48                
    49                 bSearch(A,target,low,mid);
    50                 
    51             }
    52             else
    53             {
    54                 bSearch(A,target,mid,high);
    55             }
    56             
    57             
    58             
    59         }
    60         
    61         return -1;
    62     }
    63     
    64     
    65     
    66 }
  • 相关阅读:
    GHOST CMS
    某小姑娘治疗案
    关于ssl证书的一些知识
    Hbuiler中常用的快捷键
    跌落损任胸胁案
    老年脑梗案
    Centos7安装完成后设定基本的网络配置
    Centos7下的文件压缩
    在centos7上用docker安装宝塔面板
    右手中指一侧麻木案
  • 原文地址:https://www.cnblogs.com/hansongjiang/p/3826497.html
Copyright © 2011-2022 走看看