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

    模板 #3:

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

    模板 #3 是二分查找的另一种独特形式。 它用于搜索需要访问当前索引及其在数组中的直接左右邻居索引的元素或条件。

     

    关键属性


     

    • 实现二分查找的另一种方法。
    • 搜索条件需要访问元素的直接左右邻居。
    • 使用元素的邻居来确定它是向右还是向左。
    • 保证查找空间在每个步骤中至少有 3 个元素。
    • 需要进行后处理。 当剩下 2 个元素时,循环 / 递归结束。 需要评估其余元素是否符合条件。

     

    区分语法


    • 初始条件:left = 0, right = length-1
    • 终止:left + 1 == right
    • 向左查找:right = mid
    • 向右查找:left = mid
  • 相关阅读:
    复利计算器2.01
    复利计算器2.0
    0429团队3.0
    0428 团队项目合作2.0作业
    "数学口袋精灵"bug
    操作系统-实验2
    博客评论
    复利计算升级
    0408 结对合作
    0406复利计算5.0
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10071580.html
Copyright © 2011-2022 走看看