zoukankan      html  css  js  c++  java
  • LeetCode 二分查找模板 I

    模板 #1:

    int binarySearch(vector<int>& nums, int target){
      if(nums.size() == 0)
        return -1;
    
      int left = 0, right = nums.size() - 1;
      while(left <= right){
        // Prevent (left + right) overflow
        int mid = left + (right - left) / 2;
        if(nums[mid] == target){ return mid; }
        else if(nums[mid] < target) { left = mid + 1; }
        else { right = mid - 1; }
      }
    
      // End Condition: left > right
      return -1;
    }

    模板 #1 是二分查找的最基础和最基本的形式。这是一个标准的二分查找模板,大多数高中或大学会在他们第一次教学生计算机科学时使用。模板 #1 用于查找可以通过访问数组中的单个索引来确定的元素或条件。

     

    关键属性


    • 二分查找的最基础和最基本的形式。
    • 查找条件可以在不与元素的两侧进行比较的情况下确定(或使用它周围的特定元素)。
    • 不需要后处理,因为每一步中,你都在检查是否找到了元素。如果到达末尾,则知道未找到该元素。

     

    区分语法


    • 初始条件:left = 0, right = length-1
    • 终止:left > right
    • 向左查找:right = mid-1
    • 向右查找:left = mid+1
  • 相关阅读:
    POJ 2253 Frogger
    POJ 2387
    codevs3981动态最大子段和(线段树)
    P3398仓鼠(LCA)
    codevs1036商务旅行(LCA)
    codevs3728联合权值(LCA)
    P3390矩阵快速幂
    codevs1574广义斐波那契数列
    POJ3070Fibonacci
    P3379最近公共祖先(LCA)
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10070915.html
Copyright © 2011-2022 走看看