zoukankan      html  css  js  c++  java
  • [leetcode] Binary Search

    Given a sorted (in ascending order) integer array nums of n elements and a target value, write a function to search target in nums. If target exists, then return its index, otherwise return -1.


    Example 1:

    Input: nums = [-1,0,3,5,9,12], target = 9
    Output: 4
    Explanation: 9 exists in nums and its index is 4
    
    

    Example 2:

    Input: nums = [-1,0,3,5,9,12], target = 2
    Output: -1
    Explanation: 2 does not exist in nums so return -1
    

    Note:

    1. You may assume that all elements in nums are unique.
    2. n will be in the range [1, 10000].
    3. The value of each element in nums will be in the range [-9999, 9999].

     分析:二分查找,要注意使用二分查找,数组必须是有序的。是一个必备的技能了。有递归版本和非递归版本。这里要注意无论是递归还是非递归,结束的条件都是low>high。代码如下:
          非递归:
     1 class Solution {
     2     public int search(int[] nums, int target) {
     3         return helper(nums,target,0,nums.length-1);
     4     }
     5     private int helper(int[] nums, int target, int low, int high) {
     6         while ( low <= high ){
     7             int mid = ( low + high ) / 2;
     8             if ( nums[mid] == target ) return mid;
     9             if ( nums[mid] < target ) low = mid + 1;
    10             if ( nums[mid] > target ) high = mid - 1;
    11         }
    12         return -1;
    13     }
    14 }

          运行时间2ms。


          递归版本:

     1 class Solution {
     2     public int search(int[] nums, int target) {
     3         return digui(nums,target,0,nums.length-1);
     4     }
     5     private int digui(int[] nums, int target, int low, int high){
     6         if ( low > high ) return -1;
     7         int mid = ( low + high ) / 2;
     8         if ( nums[mid] == target ) return mid;
     9         if ( nums[mid] < target )  return digui(nums,target,mid+1,high);
    10         else return digui(nums,target,low,mid-1);
    11     }
    12 }

          运行时间也是2ms。

     
          Java jdk中已经内置好了二分查找的api:binarySearch(int[] a, int fromIndex, int toIndex, int key);
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    Hdu 5595 GTW likes math
    HNOI2002 营业额统计(Splay Tree)
    hdu 5592 BestCoder Round #65(树状数组)
    hdu 5591 BestCoder Round #65(博弈)
    hdu5586 BestCoder Round #64 (div.2)
    NoSQL
    什么是关系型数据库
    关系型数据库与NOSQL
    关系型数据库
    centos6.x下安装eclipse
  • 原文地址:https://www.cnblogs.com/boris1221/p/9303679.html
Copyright © 2011-2022 走看看