首页 > 编程语言 >二分查找 - 相关基础算法总结

二分查找 - 相关基础算法总结

时间:2025-01-04 15:00:34浏览次数:3  
标签:二分 elif return target nums int mid 算法 查找

问题1:寻找 target 位置,没有返回 - 1 问题2:从右往左,寻找 < target 的第一个位置 问题3:从左往右,寻找 > target 的第一个位置 问题4:从右往左,寻找 <= target 的第一个位置 问题5:从左往右,寻找 >= target的 第一个位置

以上问题是求很多解力扣算法题的基础,需要好好的掌握:

 

问题1:寻找 target 位置,没有返回 - 1

def binary_search(nums: list[int], target: int) -> int:
    i = 0
    j = len(nums) - 1
    while i <= j:
        mid = (i + j) // 2
        if nums[mid] > target: j = mid - 1
        elif nums[mid] < target: i = mid + 1
        # 核心点:相等情况处理
        else:
            return mid
    return -1

问题2:从右往左,寻找 < target 的第一个位置

def binary_search(nums: list[int], target: int) -> int:
    i = 0
    j = len(nums) - 1
    while i <= j:
        mid = (i + j) // 2
        if nums[mid] > target: j = mid - 1
        elif nums[mid] < target: i = mid + 1
        # 核心点:相等情况处理
        else:
            j = mid - 1
    return j

问题3:从左往右,寻找 > target 的第一个位置

def binary_search(nums: list[int], target: int) -> int:
    i = 0
    j = len(nums) - 1
    while i <= j:
        mid = (i + j) // 2
        if nums[mid] > target: j = mid - 1
        elif nums[mid] < target: i = mid + 1
        # 核心点:相等情况处理
        else:
            i = mid + 1
    return i

问题4:从右往左,寻找 <= target 的第一个位置

def binary_search(nums: list[int], target: int) -> int:
    i = 0
    j = len(nums) - 1
    while i <= j:
        mid = (i + j) // 2
        if nums[mid] > target: j = mid - 1
        elif nums[mid] < target: i = mid + 1
        # 核心点:相等情况处理
        else:
            if j == mid: break
            j = mid
    return j

问题5:从左往右,寻找 >= target的 第一个位置

def binary_search(nums: list[int], target: int) -> int:
    i = 0
    j = len(nums) - 1
    while i <= j:
        mid = (i + j) // 2
        if nums[mid] > target: j = mid - 1
        elif nums[mid] < target: i = mid + 1
        # 核心点:相等情况处理
        else:
            if i == mid: break
            i = mid
    return i

 

标签:二分,elif,return,target,nums,int,mid,算法,查找
From: https://www.cnblogs.com/baokang/p/18651874

相关文章

  • 索引压缩算法 New PForDelta 简介以及使用 SIMD 技术的优化
     1.背景:搜索引擎与索引压缩 在搜索引擎或类似需要对海量文档进行检索的系统中,通常会构建倒排索引(InvertedIndex)。为降低存储成本、减少I/O并提升检索速度,对倒排索引所包含的大量整数序列进行压缩是一种行之有效的手段。•目标:在确保解压速度的同时,尽量获得更好的压缩......
  • 爬山算法与模拟退火算法的全方面比较
    一、基本概念与原理1.爬山算法        爬山算法是一种基于启发式的局部搜索算法,通过不断地向当前解的邻域中搜索更优解来逼近全局最优解。它的核心思想是,从当前解出发,在邻域内找到一个使目标函数值更大(或更小)的解作为新的当前解,直到找不到更优的解为止。2.模拟退火......
  • 计算机网络•自顶向下方法:网络安全、RSA算法
    网络安全网络安全的通用定义:网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不受偶然的或者恶意的原因而遭到破坏、更改、泄露,系统连续可靠地运行,网络服务不中断。网络中的通信安全机密性:报文内容的机密性:仅发送方和希望的接收方能够理解报文的内容通信......
  • 【优选算法】Binary-Blade:二分查找的算法刃(下)
    文章目录1.山脉数组的峰顶索引2.寻找峰值3.寻找旋转排序数组中的最小值4.点名希望读者们多多三连支持小编会继续更新你们的鼓励就是我前进的动力!本篇接上一篇二分查找,主要通过部分题目熟悉二分查找的进阶使用,重点强调二段性,找到两个区间不同的地方在哪,多画图划分界限......
  • 标准库简介 - STL容器、算法简介
    引言C++标准模板库(StandardTemplateLibrary,简称STL)是C++标准库的一部分,提供了丰富的数据结构和算法。STL的设计目标是通用性和高效性,它通过模板机制实现了高度的灵活性和复用性。本文将详细介绍STL中的容器和算法,并通过实例帮助读者理解其使用方法。1.STL容器简介......
  • 请使用js实现一个分组抽签的算法
    要实现一个分组抽签的算法,我们首先需要明确一些要求和步骤。以下是一个简单的实现,它允许你将一组人员随机分配到指定数量的组中:输入:参与抽签的人员列表。需要的组数。输出:每个组的人员列表。以下是一个简单的JavaScript实现:functionshuffleArray(array){for......
  • FJSP:部落竞争与成员合作算法(Competition of tribes and cooperation of members ,CTCM)
    一、柔性作业车间调度问题柔性作业车间调度问题(FlexibleJobShopSchedulingProblem,FJSP),是一种经典的组合优化问题。在FJSP问题中,有多个作业需要在多个机器上进行加工,每个作业由一系列工序组成,每个工序需要在特定的机器上完成。同时,每个机器一次只能处理一个工序,且每个工......
  • python和matlab水下目标图像增强算法(Retinex图像增强算法(SSR, MSR, MSRCR))
    水下图像颜色校正与增强使用Retinex方法水下图像常常因为能见度差和散射而退化,导致色彩丢失和光照减弱,特别是在红色通道。本项目复制了一种用于水下图像的颜色校正算法。该算法利用相机中的彩色滤波阵列(CFA)特性来增强色彩和光照,并采用Retinex模型改进光照效果以及自适应直......
  • 机器学习基础算法 (七)-朴素贝叶斯(Naive Bayes)
    介绍朴素贝叶斯(NaiveBayes)算法是一种基于贝叶斯定理的简单概率分类算法,通常用于文本分类、垃圾邮件过滤、情感分析等任务。尽管其“朴素”之名可能让人觉得它不够复杂,但实际应用中,朴素贝叶斯算法以其高效性和简单性,尤其适用于特征之间条件独立的假设下,表现出色。本文将......
  • 如何使用建筑物变化检测算法的Baseline工程 ,使用PyTorch框架,并选择U-Net来进行二分类
    建筑物变化检测算法baseline工程使用PyTorch框架,并选择U-Net来进行二分类任务(变化/不变)Baseline工程将基于深度学习方法来检测建筑物的变化备注:博客所有文章代码仅供参考!如何使用建筑物变化检测算法的Baseline工程,一个详细的步骤和代码示例。这个Baseline工程将基于深......