zoukankan      html  css  js  c++  java
  • 二分查找--考虑target不在查询数组内的情况

    1. 二分查找

    class Solution {
    public:
        /**
         * 二分查找
         * @param n int整型 数组长度
         * @param v int整型 查找值
         * @param a int整型vector 有序数组
         * @return int整型
         */
        // 查找左边界
        int upper_bound_(int n, int v, vector<int>& a) {
            // write code here
            // 搜索区间左闭右开,[left, right)
            int left = 0; // 左边界,数组中的最大值元素
            int right = n-1; 	// 右边界,数组长度
            // 循环条件,左边界小于右边界
            while(left < right){
                int mid = left+(right-left)/2;
                // mid值大于目标值,右边界向左收缩
                if (a[mid] >= v) {
                    // 当mid==0,即查找到数组起始位置,不能再继续循环,故此时退出
                    // 当a[mid-1]<v且a[mid] >= v,此时可认为mid即是target的索引位置
                    if (mid == 0 || a[mid-1]<v) return mid+1;
                    else
                        right = mid;	//目标数target在左半幅,将下一次数组查询的右边界改为mid
                }
                // mid值小于目标值,左边界向右扩张
                else
                    left = mid +1;
                // 传统方法
                // 符合条件时不立即返回,继续收缩右侧边界,锁定左侧边界
                //else if (a[mid]==v) {
                //    right = mid;
                //}
            }
            return n+1;
        }
    };
    
  • 相关阅读:
    Quartus II -----破解
    博客诞生
    OpenMPI 学习笔记(一)并行计算机和分布式计算
    信息安全(1):安全策略
    认证
    SSL/TLS 和Https
    IPSec 网络协议安全
    C# 快速高效率复制对象另一种方式 表达式树
    C语言学习指针和数组2
    C语言学习二维数组
  • 原文地址:https://www.cnblogs.com/litchi99/p/13724695.html
Copyright © 2011-2022 走看看