c++二分法查找_二分法查找python代码

c++二分法查找_二分法查找python代码二分法:二分法应用条件:1)数组为有序数组。2)同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。区间的定义:区间的定义不同代码就不同。1)定义target在[left,right]区间while(left<=right)要使用<=,因为left==right是有意义的,所以使用<=。if(nums[middle]>target)right要赋值为middle-1,因为当前这个nums[mid

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

二分法:

二分法应用条件:1)数组为有序数组。2)同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的。

区间的定义:

区间的定义不同代码就不同。
1)定义target在[left, right]区间
while (left <= right) 要使用 <= ,因为left == right是有意义的,所以使用 <=。if (nums[middle] > target) right 要赋值为 middle – 1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束下标位置就是 middle – 1。
以leecode704为例:

// 定义target在[left, right]区间
class Solution { 
   
public:
    int search(vector<int>& nums, int target) { 
   
        int left = 0;
        int right = nums.size() - 1; // 定义target在左闭右闭的区间里,[left, right]
        while (left <= right) { 
    // 当left==right,区间[left, right]依然有效,所以用 <=
            int middle = left + ((right - left) / 2);// 防止溢出 等同于(left + right)/2
            if (nums[middle] > target) { 
   
                right = middle - 1; // target 在左区间,所以[left, middle - 1]
            } else if (nums[middle] < target) { 
   
                left = middle + 1; // target 在右区间,所以[middle + 1, right]
            } else { 
    // nums[middle] == target
                return middle; // 数组中找到目标值,直接返回下标
            }
        }
        // 未找到目标值
        return -1;
    }
};

Jetbrains全家桶1年46,售后保障稳定

2)如果说定义 target 是在一个在左闭右开的区间里[left, right) :

// 定义target在[left, right)区间
// 版本二
class Solution { 
   
public:
    int search(vector<int>& nums, int target) { 
   
        int left = 0;
        int right = nums.size(); // 定义target在左闭右开的区间里,即:[left, right)
        while (left < right) { 
    // 因为left == right的时候,在[left, right)是无效的空间,所以使用 <
            int middle = left + ((right - left) >> 1);
            if (nums[middle] > target) { 
   
                right = middle; // target 在左区间,在[left, middle)中
            } else if (nums[middle] < target) { 
   
                left = middle + 1; // target 在右区间,在[middle + 1, right)中
            } else { 
    // nums[middle] == target
                return middle; // 数组中找到目标值,直接返回下标
            }
        }
        // 未找到目标值
        return -1;
    }
};

参考:
代码随想录:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%BB%E7%BB%93

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/230801.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • pytest 执行用例_测试用例执行结果有哪些

    pytest 执行用例_测试用例执行结果有哪些前言平常我们功能测试用例非常多时,比如有1千条用例,假设每个用例执行需要1分钟,如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时,会需要协调多个测试资源来把任务分成两部分,于是执行时间

    2022年7月29日
    4
  • ubuntu python安装pip_ubuntu离线安装pip

    ubuntu python安装pip_ubuntu离线安装pip说明pip是一个安装和管理Python包的工具。在Pip的帮助下,你可以安装独特版本的包。最重要的是,Pip可以通过一个“requirements”的工具来管理一个由包组成的列表和版本号。Pip很像easy_install,但是Pip有一些额外的特色。ubuntu安装pip#建议在操作前将源替换为163或阿里的源#1.更新系统包sudoapt-getupdatesud

    2025年7月11日
    2
  • AWStats简介

    AWStats简介安装[url]http://sourceforge.net/projects/awstats/[/url]下载安装包后:GNU/Linux:tarzxfawstats-version.tgzawstats的脚本和静态文件缺省都在wwwroot目录下:将cgi-bin目录下的文件都部署到cgi-bin/目录下:/home/apache/cgi-bin/awstats/…

    2022年7月16日
    17
  • java数据库图书销售系统_SQL+java数据库课程设计,图书销售管理系统[通俗易懂]

    java数据库图书销售系统_SQL+java数据库课程设计,图书销售管理系统[通俗易懂]【实例简介】SQL数据库课程设计,图书销售管理系统,报告,任务书,挺全的【实例截图】【核心代码】07计本2班_15号_刘思旭_图书销售管理系统└──07计本2班_15号_刘思旭_图书销售管理系统├──07计本2班_15号_刘思旭_图书销售管理系统│├──数据库││├──bookshop_Data.MDF││└──bookshop_Log.LDF│└──…

    2022年6月7日
    22
  • C语言递归求圆周率,python中的递归问题,求圆周率[通俗易懂]

    C语言递归求圆周率,python中的递归问题,求圆周率[通俗易懂]以上面一个公式为例:importnumpyasnpdefgetPi(n):ifn==0:returnnp.power(-1,n)*(1.0/(2*n+1))else:returnnp.power(-1,n)*(1.0/(2*n+1))+getPi(n-1)print4*getPi(100)可以通过上面一个递归实现。特点:①递归就是在过程或者函数里调用自身。②在使用递归策略时,必…

    2025年11月2日
    5
  • CentOS7安装MySQL8.0图文教程

    CentOS7安装MySQL8.0图文教程1.下载MySQL所需要的安装包      网址:https://dev.mysql.com/downloads/mysql/2.SelectOperatingSystem:选择RedHat,CentOS是基于红帽的,SelectOSVersion:选择linux73.选择RPMBundle点击Download4.点击 Noth…

    2022年6月14日
    41

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号