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);
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    C# 非UI线程向UI线程发送数据的两种方法
    c# 富客户端使用 MethodInvoker简化代码
    Unable to resolve service for type 'Microsoft.Extensions.Logging.ILogger' while attempting to activate 'xxxx'.
    弃元
    Serilog 配置基础知识
    测试软件开发准则--基于TTStand
    SuperSocketHostBuilder<TReceivePackage>
    Ext CheckBoxGroup使用
    2020年12月28日 新工作新旅程
    2021年全国计算机等级考试报名照片制作教程(压缩、裁剪、换白底)
  • 原文地址:https://www.cnblogs.com/boris1221/p/9303679.html
Copyright © 2011-2022 走看看